删除具有受保护析构函数的对象
Delete object with a protected destructor
我对C++内存管理相当陌生。我读过,每个类都应该有一个虚拟析构函数吗?并找到了这个答案:
每个抽象类都应该有一个
- 受保护的析构函数
- 虚拟析构函数
如果你有一个公共的非虚拟析构函数,那就不好了,因为它允许用户通过该指针删除派生对象。因为众所周知,这是未定义的行为。
对于一个不打算通过指向它的指针来删除的类,没有任何理由拥有虚拟析构函数。这不仅会浪费资源,更重要的是,它会给用户一个错误的提示。想想给std::迭代器一个虚拟析构函数会有什么糟糕的意义。
所以我现在有一个受保护的析构函数(我不是从类派生的)。
不过在另一个类中,我有一个指向该对象的指针。在我的构造函数中,我使指针为";新的";该类的对象,在我的销毁器中,我想销毁它。
我该怎么做?如果析构函数没有得到保护,我会出现seg错误(我不完全理解,但我意识到这是糟糕的编程)。如果析构函数受到保护,我不知道如何删除对象。
您在上面的块中缺少术语"抽象"。"abstract"的意思是,你不应该拥有类的对象。如果您有一个类中的对象,那么它几乎总是应该有一个公共析构函数。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 使用基类指针创建对象时,缺少派生类析构函数
- 对具有动态分配的内存和析构函数的类对象的引用
- C++析构函数调用两次,堆栈分配的复合对象
- 如何从 Gtk::窗口调用派生对象的析构函数
- 为什么数组中对象的析构函数在被另一个对象替换时不被调用?
- 为什么为未删除的对象调用析构函数?
- 对象的构造函数和析构函数
- 循环中本地对象的析构函数是否保证在下一次迭代之前被调用?
- C++使用函数对象的线程,如何调用多个析构函数而不是构造函数?
- 从未调用shared_ptr对象的析构函数
- 是否可以在其析构函数中使用指向已销毁对象的指针?
- 使用私有析构函数删除动态分配的对象
- C++ std::线程调用方法,从对象原因到调用此类的析构函数
- 为什么在这里调用析构函数,以及在调用该对象析构函数后如何调用对象成员函数?
- 对象析构函数在多线程处理时不断被调用,但该对象并未超出范围
- C++包含包含指针的对象的对象析构函数
- Objective-C++C++对象析构函数
- 结构对象析构函数
- 在Exit()时调用基本对象析构函数