首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将析构函数作为私有函数有什么用?

将析构函数作为私有函数有什么用?
EN

Stack Overflow用户
提问于 2009-03-10 18:59:52
回答 9查看 85.9K关注 0票数 213

将析构函数作为私有函数有什么用?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-03-10 19:02:45

基本上,任何时候你想让其他类负责你的类的对象的生命周期,或者你有理由阻止对象的销毁,你都可以将析构函数设为私有。

例如,如果你正在做一些引用计数的事情,你可以让对象(或已经被“加为好友”的管理器)负责计算对其自身的引用数量,并在数量达到零时将其删除。当仍有引用时,私有dtor将防止其他任何人删除它。

再举一个例子,如果您有一个对象,它有一个管理器(或其本身),它可能会销毁它,或者可能会拒绝销毁它,这取决于程序中的其他条件,例如打开的数据库连接或正在写入的文件。你可以在类或管理器中有一个"request_delete“方法,它将检查该条件,它将删除或拒绝,并返回一个状态,告诉你它做了什么。这比仅仅调用"delete“要灵活得多。

票数 194
EN

Stack Overflow用户

发布于 2009-03-10 19:06:44

这样的对象永远不能在堆栈上创建。总是在堆上。而删除必须通过朋友或成员完成。产品可以使用单个对象层次结构和自定义内存管理器--这样的场景可以使用私有dtor。

代码语言:javascript
运行
复制
#include <iostream>
class a {
    ~a() {}
    friend void delete_a(a* p);
};


void delete_a(a* p)  {
    delete p;
}

int main()
{
    a *p = new a;
    delete_a(p);

    return 0;
}
票数 81
EN

Stack Overflow用户

发布于 2009-03-10 19:03:15

当你不想让用户访问析构函数时,也就是说,你只想通过其他方式销毁对象。

http://blogs.msdn.com/larryosterman/archive/2005/07/01/434684.aspx给出了一个例子,其中对象是引用计数的,并且只有当计数变为零时才应该由对象本身销毁。

票数 45
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/631783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档