- 主题:刚才解决了一个内存泄露的 BUG
本青日常使用 c++ 写一些偏重计算和内存存储的微服务。从来不使用裸指针,一般都是用 shared_ptr 或者 QScopedPointer<> 这种智能指针。对象与对象之间,采用生命周期依赖的方式来管理作用域。也就是每一个对象,必须依附于它的父对象。当父对象删除的时候,所有子对象也跟着销毁。
原以为已经万无一失了。没想到今天发现了一个内存泄露。定位后,发现原来是因为我忘了给个类型搞虚的析构函数。
struct RecordPrivate: QSharedData {}
struct ObjectRecordPrivate: RecordPrivate
{
QStringList samples;
};
struct SampleRecordPrivae: RecordPrivate
{
....
};
在上面这个 ObjectRecordPrivate 里面没写虚的析构函数所以就悲剧了。
--
修改:hgoldfish FROM 59.61.198.*
FROM 59.61.198.*
老鱼好用功啊,用C++就像在道口跳舞。。。
【 在 hgoldfish 的大作中提到: 】
: 本青日常使用 c++ 写一些偏重计算和内存存储的微服务。从来不使用裸指针,一般都是用 shared_ptr 或者 QScopedPointer<> 这种智能指针。对象与对象之间,采用生命周期依赖的方式来管理作用域。也就是每一个对象,必须依附于它的父对象。当父对象删除的时候,所有子对象也跟着销毁。
: 原以为已经万无一失了。没想到今天发现了一个内存泄露。定位后,发现原来是因为我忘了给个类型搞虚的析构函数。
: struct RecordPrivate: QSharedData {}
: ...................
--
FROM 111.199.251.*
这种静态代码检查工具应该能轻松检测出来:有虚函数的类的基类的dtor不是virtual的
--
FROM 114.254.115.*
请问cpp 微服务restful api用哪个框架?
有类似java springboot ,python flask开源微服务框架吗?
--
FROM 223.104.40.*
有什么好用的静态代码检查工具?
【 在 z16166 的大作中提到: 】
: 这种静态代码检查工具应该能轻松检测出来:有虚函数的类的基类的dtor不是virtual的
--
FROM 222.129.135.*
要不要试一下我弄的 qtng.org 我日常用这个写 restful 接口。
最近上线了中文文档。
不过只要懂 python 的标准库,就能一眼看明白。因为 API 都是抄 python 的 socketserver 模块的。
c++ 就别搞太麻烦的封装了。业务都比较简单。关键是性能。
【 在 xiaofeiyun 的大作中提到: 】
: 请问cpp 微服务restful api用哪个框架?
: 有类似java springboot ,python flask开源微服务框架吗?
--
修改:hgoldfish FROM 120.37.22.*
FROM 120.37.22.*
Clang tidy。lsp用clangd的话,这其实写代码时候就有提示
【 在 song2692005 的大作中提到: 】
: 有什么好用的静态代码检查工具?
论坛助手,iPhone
--
FROM 123.158.254.*
怎么定位到的
--
FROM 61.48.14.*
不懂为什么这样会泄漏,和虚析构有什么关系
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 本青日常使用 c++ 写一些偏重计算和内存存储的微服务。从来不使用裸指针,一般都是用 shared_ptr 或者 QScopedPointer<> 这种智能指针。对象与对象之间,采用生命周期依赖的方式来管理作用域。也就是每一个对象,必须依附于它的父对象。当父对象删除的时候,所有子对象也跟着销毁。
:
: 原以为已经万无一失了。没想到今天发现了一个内存泄露。定位后,发现原来是因为我忘了给个类型搞虚的析构函数。
:
--
FROM 114.86.96.*
字段在析构函数里面销毁的啊。
父类没有字段,所以它析构函数里面啥都不销毁。
子类有字段,需要调到子类的析构函数才会销毁。
Base *p = new Derived()
delete p;
以上代码,如果没有虚的析构函数,就会只调用 Base 的析构函数,而不会调到 Derived.
我写析构函数都习惯写虚的,不管有没有子类。这一次疏忽了。
【 在 freyoneby 的大作中提到: 】
: 不懂为什么这样会泄漏,和虚析构有什么关系
: 畔佟
--
修改:hgoldfish FROM 120.37.23.*
FROM 120.37.23.*