- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
class A
{
public:
A& operator=(const A &a)
{
this->A::A(a);
return *this;
};
// ...
};
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+13
class A
{
public:
A& operator=(const A &a)
{
this->A::A(a);
return *this;
};
// ...
};
Правильный оператор присваивания!
А как оно вообще компилируется то? Что за компилятор?
this->A::A(a); --это ну никак не создание нового объекта.
Если бы было написано нечто типа:
A(a); -- это да, это эквивалентно A a, и, кстати, тоже бы не компилировалось т.к. переменная под именем "a" уже существует.
Поэтому интересно, что за чудо компилятор допускает подобную конструкцию. Сколь я помню, стандарт не допускает непосредственного вызова конструкторов.
VS 2005 компилирует это и оно вполне работает )
этому компилятору пофиг на всякие стандарты, да еще и не мелкософтовкие
Нормальный код, может, разве, не совсем очевиден.
Присваивание происходит через вызов конструктора копий
Как это компилируется?!
А вообще это известный прикол. Только правильно он пишется так:
class A
{
public:
A& operator=(const A &a)
{
new(this) A(a);
return *this;
};
// ...
};
Конструируем новый объект без выделения памяти
что это за высер? нах?
это размещающий new.