【问题标题】:Delete object with a protected destructor使用受保护的析构函数删除对象
【发布时间】:2012-02-05 09:09:48
【问题描述】:

我对 C++ 内存管理相当陌生。我读了Should every class have a virtual destructor? 并找到了这个答案:

每个抽象类都应该有一个

  • 受保护的析构函数或
  • 虚拟析构函数

如果您有一个公共的非虚拟析构函数,那就不好了,因为它允许用户通过该指针删除派生对象。众所周知,这是未定义的行为。

对于不打算通过指向它的指针删除的类,没有任何理由拥有虚拟析构函数。这不仅会浪费资源,更重要的是会给用户一个错误的提示。想想给 std::iterator 一个虚拟析构函数会有什么糟糕的意义。

所以我现在有一个受保护的析构函数(我不是从类派生的)。

虽然我有一个指向该对象的指针,但在另一个类中。在我的构造函数中,我给指针一个该类的“新”对象,在我的 destrcutor 中我想销毁它。

我该怎么做?如果析构函数没有受到保护,我会遇到段错误(我不完全理解,但我意识到无论如何都是糟糕的编程)。如果析构函数受到保护,我不知道如何删除该对象。

【问题讨论】:

    标签: c++ pointers constructor protected


    【解决方案1】:

    您在上面的块中缺少“抽象”一词。 “抽象”意味着你不应该/拥有/类的对象。如果你有一个类的对象,它几乎总是应该有一个公共的析构函数。

    【讨论】:

    • 好的,但是如果我公开析构函数,当我尝试删除该对象时会出现段错误
    • 我意识到我的问题在于要删除的类中的某个地方。此时我正在考虑构造函数。
    • 你必须展示一些代码。段错误很可能不是来自内置结构,而是来自您自己的编程:)
    • 谢谢,我会搞砸一点,做一些谷歌搜索,也许会问另一个问题......寻求帮助 - 必须说我确实完全错过了“抽象”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 2013-09-30
    • 2012-11-23
    • 2020-03-06
    • 2013-05-21
    • 1970-01-01
    相关资源
    最近更新 更多