1. C++ / Говнокод #24916

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 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);
    }

    ОНО РАБОТАЕТ!...вечно правда...НО ПОЧЕМУ ЭТА ТВАРЬ РАБОТАЕТ??? какого можно удалять память... ещё не выделенную... если кто мне объяснит, я буду счастлив (ах да код появился при решении одной забавной задачки, что произойдёт с конструктором копирования при удалении указателя на свой же экземпляр класса)

    Запостил: cat_code, 13 Октября 2018

    Комментарии (4) RSS

    • > ОНО РАБОТАЕТ!
      > НО ПОЧЕМУ ЭТА ТВАРЬ РАБОТАЕТ???
      А чего ты хотел достичь этим кодом?

      > какого можно удалять память... ещё не выделенную...
      Не можно, т.е. невозможно. И твой пример этого не делает.

      > что произойдёт с конструктором копирования при удалении указателя на свой же экземпляр класса)
      Будет Undefined Behavior (UB) во всех случаях, кроме когда обьект this был аллоцирован с помощью new (если под "удалить" подразумевается "delete")

      Ты мне парсер сломал! Перестаь называть переменные большими буквами, ато как последний майкрософтовец
      Ответить
    • Эмокод какой-то.
      MyClass() 
        {
          delete this; // Мама, роди меня обратно
        }
      Ответить
      • Постоянно так делаю
        t={}; function t:del() self=nil end
        Ответить
        • function initFoo():
            ...
            initFoo = nil # Функция init выполнилась, можно удалить из памяти
          
          function doFoo(bbb):
            if initFoo: initFoo() # инициализация только при первом вызове
            ...
          Ответить

    Добавить комментарий