3

你更喜欢哪一个来删除对象?特别是在 QT 中,但也欢迎其他做法。这两个选择对我来说似乎相同,是吗?

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

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

或者

  1. 在类的析构函数中销毁

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

3 回答 3

8

在罗马做到入乡随俗。如果您的框架使用一种方法(例如 Qt 依赖于父子关系),请在您的代码中使用此方法。

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

于 2010-05-04T11:48:14.957 回答
3

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

于 2010-05-04T11:43:42.267 回答
0

对我来说,我认为最好选择编写代码的捷径(1),但要考虑到最佳实践,因为 Qt 会为您执行此操作(销毁用户定义的变量)。

于 2010-05-04T11:55:29.213 回答