Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- /* Параметры рисуемого многоугольника. Пока есть только число сторон. */
- struct PolyParams {
- const volatile int vert_num;
- PolyParams(int vert_num) : vert_num(vert_num) {}
- PolyParams* defensiveCopy() { return new PolyParams(this->vert_num); }
- };
- /* Эта функция находится где-нибудь в чужом коде*/
- void draw_poly(PolyParams* params) {;
- volatile int *ptr;
- //здесь не static_cast<int*>, потому что он не смог бы убрать type qualifiers
- ptr = (int*)( &(params->vert_num) );
- //это Undefined Behavior, но работает везде
- *ptr = 5; // have a nice debug
- }
- int main(int argc, char *argv[])
- {
- PolyParams* pp = new PolyParams(3);
- //Изначально всё в порядке
- printf( "three=%d\n", pp->vert_num );
- //Нарисуем защитную копию
- PolyParams* dcpp = pp->defensiveCopy();
- draw_poly(dcpp);
- delete dcpp;
- //Все еще всё в порядке
- printf( "three=%d\n", pp->vert_num );
- //А теперь нарисуем саму фигуру
- draw_poly(pp);
- //Кажется, что-то пошло не так
- printf( "three=%d\n", pp->vert_num );
- delete pp;
- fgetchar();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement