- 主题:刚才解决了一个内存泄露的 BUG
Effective C++里面专门有一节讲这个
【 在 hgoldfish 的大作中提到: 】
: 标 题: Re: 刚才解决了一个内存泄露的 BUG
: 发信站: 水木社区 (Sat Apr 5 15:49:15 2025), 站内
:
: 字段在析构函数里面销毁的啊。
:
: 父类没有字段,所以它析构函数里面啥都不销毁。
:
: 子类有字段,需要调到子类的析构函数才会销毁。
:
: Base *p = new Derived()
: delete p;
:
: 以上代码,如果没有虚的析构函数,就会只调用 Base 的析构函数,而不会调到 Derived.
:
: 我写析构函数都习惯写虚的,不管有没有子类。这一次疏忽了。
:
: 【 在 freyoneby 的大作中提到: 】
: : 不懂为什么这样会泄漏,和虚析构有什么关系
: : 畔佟
:
: --
: 灭绝人性啊
:
:
: ※ 修改:·hgoldfish 于 Apr 5 15:51:22 2025 修改本文·[FROM: 120.37.23.*]
: ※ 来源:·水木社区 mysmth.net·[FROM: 120.37.23.*]
--
修改:hgoldfish FROM 120.37.23.*
FROM 117.129.55.*
对。这个应该是使用 C++ 的基本功。
只是我刚好疏忽没写好。
不过也说明 C++ 的坑点确实多。
【 在 MyWorkLife 的大作中提到: 】
: Effective C++里面专门有一节讲这个
--
FROM 120.37.23.*
析构函数要用虚函数,这是最基本的一个准则吧。。。
【 在 hgoldfish 的大作中提到: 】
: 字段在析构函数里面销毁的啊。
: 父类没有字段,所以它析构函数里面啥都不销毁。
: 子类有字段,需要调到子类的析构函数才会销毁。
: ...................
--
FROM 183.199.184.*
这个也太绝对了
你看STL里面哪个容器的析构函数是虚的
如果我的派生类没有额外的资源需要处理,我只是在我的派生类做一些功能增强
当然可以选择基类的析构不是虚函数,没有必要为不需要的功能付出开销
【 在 buildtolast 的大作中提到: 】
: 析构函数要用虚函数,这是最基本的一个准则吧。。。
:
--
FROM 111.222.57.*
泄露 -> 泄漏
【 在 hgoldfish 的大作中提到: 】
: 本青日常使用 c++ 写一些偏重计算和内存存储的微服务。从来不使用裸指针,一般都是用 shared_ptr 或者 QScopedPointer<> 这种智能指针。对象与对象之间,采用生命周期依赖的方式来管理作用域。也就是每一个对象,必须依附于它的父对象。当父对象删除的时候,所有子对象也跟着
: 销毁。
: 原以为已经万无一失了。没想到今天发现了一个内存泄露。定位后,发现原来是因为我忘了给个类型搞虚的析构函数。
: ...................
--
FROM 124.64.127.*
算是一个最佳实践,可以避免大部分的问题。
【 在 overcomeunic 的大作中提到: 】
: 这个也太绝对了
: 你看STL里面哪个容器的析构函数是虚的
: 如果我的派生类没有额外的资源需要处理,我只是在我的派生类做一些功能增强
: ...................
--
FROM 183.199.184.*
是的,对于大部分的场景都适用
但C/C++ 作为系统编程语言,在性能上面,的确没有妥协的空间
【 在 buildtolast 的大作中提到: 】
: 算是一个最佳实践,可以避免大部分的问题。
:
--
FROM 106.11.31.*
httplib 就一个头文件,最轻量级的了
【 在 xiaofeiyun 的大作中提到: 】
: 请问cpp 微服务restful api用哪个框架?
: 有类似java springboot ,python flask开源微服务框架吗?
--
FROM 111.199.105.*