- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
class MyClass
{
public:
MyClass() {};
MyClass(const MyClass & M1) {
MyClass * T = this;
delete this;
T = new MyClass(M1);
}
~MyClass() {};
private:
};
int main(int argc, char *argv[])
{
MyClass A1;
MyClass *B=new MyClass(A1);
}
ОНО РАБОТАЕТ!...вечно правда...НО ПОЧЕМУ ЭТА ТВАРЬ РАБОТАЕТ??? какого можно удалять память... ещё не выделенную... если кто мне объяснит, я буду счастлив (ах да код появился при решении одной забавной задачки, что произойдёт с конструктором копирования при удалении указателя на свой же экземпляр класса)
Elvenfighter 13.10.2018 22:05 # +2
> НО ПОЧЕМУ ЭТА ТВАРЬ РАБОТАЕТ???
А чего ты хотел достичь этим кодом?
> какого можно удалять память... ещё не выделенную...
Не можно, т.е. невозможно. И твой пример этого не делает.
> что произойдёт с конструктором копирования при удалении указателя на свой же экземпляр класса)
Будет Undefined Behavior (UB) во всех случаях, кроме когда обьект this был аллоцирован с помощью new (если под "удалить" подразумевается "delete")
Ты мне парсер сломал! Перестаь называть переменные большими буквами, ато как последний майкрософтовец
Steve_Brown 15.10.2018 11:34 # +1
3oJIoTou_xyu 15.10.2018 12:48 # 0
Steve_Brown 15.10.2018 13:30 # 0