Удаление объекта: использовать родительский или нет - PullRequest
3 голосов
/ 04 мая 2010

Какой объект вы предпочитаете удалять? Особенно в QT, но приветствуются и другие практики. Эти две альтернативы кажутся мне одинаковыми, не так ли?

  1. Привязать к другому классу и уничтожать при его уничтожении.

    SomeClass::SomeClass{
     socket_ = new QTcpSocket(this);
    }
    

или

  1. Уничтожить в деструкторе класса

    SomeClass::SomeClass{
     socket_ = new QTcpSocket();
    }
    
    SomeClass::~SomeClass{
     delete socket_;
    }
    

Ответы [ 3 ]

8 голосов
/ 04 мая 2010

Находясь в Риме, делайте так, как делают римляне. Если ваша структура использует один метод (например, Qt использует отношения родитель-ребенок), используйте этот метод в своем коде.

Конечно, не забывайте об общих хороших методах управления памятью: создавайте объекты в стеке, когда это возможно, используйте общие указатели и т. Д.

3 голосов
/ 04 мая 2010

RAII говорит, что вы должны сделать это в деструкторе SomeClass. Согласно этой философии, экземпляр SomeClass владеет экземпляром QTcpSocket, поэтому первый должен полностью управлять временем жизни последнего. Хотя оба подхода верны, я думаю, что предпочел бы тот, который не требует от меня, delete this.

0 голосов
/ 04 мая 2010

Мне кажется, что лучше выбрать короткий способ написания кода (1), но с учетом передового опыта, потому что Qt сделает это (уничтожит пользовательские переменные) для вас.

...