- 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;
};
// ...
};
Правильный оператор присваивания!
guest 16.06.2009 17:54 # +1
А как оно вообще компилируется то? Что за компилятор?
guest 16.06.2009 22:02 # 0
guest 16.06.2009 23:44 # 0
this->A::A(a); --это ну никак не создание нового объекта.
Если бы было написано нечто типа:
A(a); -- это да, это эквивалентно A a, и, кстати, тоже бы не компилировалось т.к. переменная под именем "a" уже существует.
Поэтому интересно, что за чудо компилятор допускает подобную конструкцию. Сколь я помню, стандарт не допускает непосредственного вызова конструкторов.
guest 18.06.2009 17:51 # 0
VS 2005 компилирует это и оно вполне работает )
guest 22.06.2009 16:12 # 0
этому компилятору пофиг на всякие стандарты, да еще и не мелкософтовкие
guest 23.06.2009 09:34 # −1
guest 23.06.2009 10:49 # +3
Нормальный код, может, разве, не совсем очевиден.
Присваивание происходит через вызов конструктора копий
guest 23.06.2009 12:59 # +4
Как это компилируется?!
А вообще это известный прикол. Только правильно он пишется так:
class A
{
public:
A& operator=(const A &a)
{
new(this) A(a);
return *this;
};
// ...
};
Конструируем новый объект без выделения памяти
guest 24.06.2009 12:47 # −5
что это за высер? нах?
guest 24.06.2009 16:08 # +3
это размещающий new.
guest 14.07.2009 09:15 # 0
guest 10.08.2009 17:14 # 0
guest 10.08.2009 19:30 # 0
anonimb84a2f6fd141 25.11.2012 00:19 # 0