对象删除:是否使用父对象

时间:2010-05-04 11:25:50

标签: c++ qt initialization delete-operator

您更喜欢删除对象?特别是在QT,但也欢迎其他做法。这两个选择对我来说是一样的,是吗?

  1. 绑定到另一个类,并在它被销毁时销毁。

    SomeClass::SomeClass{
     socket_ = new QTcpSocket(this);
    }
    
    1. 在类

      的析构函数中销毁
      SomeClass::SomeClass{
       socket_ = new QTcpSocket();
      }
      
      SomeClass::~SomeClass{
       delete socket_;
      }
      

3 个答案:

答案 0 :(得分:8)

在罗马时,像罗马人一样。如果您的框架使用一种方法(例如Qt依赖于父子关系),请在代码中使用此方法。

当然不要忘记一般良好的内存管理实践:尽可能在堆栈上创建对象,使用共享指针等。

答案 1 :(得分:3)

RAII说你应该在SomeClass的析构函数中做到这一点。根据该哲学,SomeClass实例拥有QTcpSocket实例,因此前者应该完全管理后者的生命周期。虽然这两种方法都是有效的,但我认为我更喜欢那种不需要delete this的方法。

答案 2 :(得分:0)

对我来说,我认为最好选择编写代码的简短方法(1),但要记住最佳实践,因为Qt会为你做(破坏用户定义的变量)。