Prerequisities:
Чтобы понять этот вопрос, сначала прочтите следующий вопрос и ответ на него:
Приведение auto_ptr к auto_ptr
В
Приведите auto_ptr к auto_ptr Стив ответил, что "Ваш static_cast скопирует auto_ptr во временное состояние, и поэтому sS будет сброшен, а ресурс будет уничтожен, когда временное состояние (( в конце выписки). "
Меня интересует процесс временного создания, пока вызывается static_cast
.
Я хотел бы иметь код, который я могу проследить, чтобы увидеть этот эффект.
Я не могу использовать static_cast<auto_ptr<Circle>> ...
, потому что он не может быть скомпилирован, поэтому мне нужно написать некоторый класс моделирования вместо auto_ptr
и наблюдать за процессом временного создания.
Я также понимаю, что временное создание тесно связано с вызовом конструктора копирования.
Потеря владения auto_ptr
моделируется с присвоением копии, которое устанавливает поле источника _radius
в отрицательное значение (мне нужна простая логическая модель auto_ptr
).
Итак, я предлагаю следующий Circle
класс:
#include <iostream>
class Shape {};
class Circle: public Shape {
double _radius;
public:
explicit Circle(double radius = .5): _radius(radius) {}
Circle &operator =(Circle &circle) {
_radius = circle._radius;
circle._radius = -1.;
return *this;
}
Circle(Circle &circle) { *this = circle; }
double GetRadius() { return _radius; }
};
int wmain() {
using namespace std;
Circle c1(100), c2(200), c3(300);
c2 = c3;
Shape *s1, s2;
s1 = &c1;
wcout << static_cast<Circle *>(s1)->GetRadius() << endl;
return 0;
}
Ok. Здесь мы видим, что «передача права собственности» происходит в c2 = c3
.
НО я не могу добиться временного создания в static_cast
.
Вопрос: как сделать небольшую симуляцию создания временного объекта при static_cast
?
Мне кажется, Стив, что временный объект создается во время каста. Единственное, что я хочу, это написать пример, показывающий временное создание . Эта цель имеет академические причины.
Может кто-нибудь уточнить, как добиться эффекта, описанного в ответе Стива, который он разместил в указанной теме?