关于 C++类成员为智能指针的一些疑问。

2021-02-18 01:30:51 +08:00
 V2WT

如果一个类的成员是智能指针去管理一些资源。

那么如果这个类的对象是 new 产生的。此时如果没有正确调用 delete. 则智能指针管理的这些资源也是会发生泄漏。直到程序结束,被系统回收吗?

977 次点击
所在节点    问与答
9 条回复
Tony042
2021-02-18 01:33:43 +08:00
我感觉是的,因为这个智能指针的引用计数始终不会被减去,所以这些资源也会泄露。
BrettD
2021-02-18 01:34:41 +08:00
没有析构的话不会释放
wevsty
2021-02-18 01:42:12 +08:00
是这样没错。

不过既然能用智能指针,那当然最好在类 new 的时候就要用智能指针包裹好,这样就不会漏 delete 了。
thedrwu
2021-02-18 06:52:23 +08:00
说实话,自从<iostream>不用加 .h 的那年开始,我已经不知道 new 怎么写了
jobsofchina
2021-02-18 08:36:19 +08:00
@thedrwu 请问是有什么更好的方法吗?
dinghao188
2021-02-18 09:36:24 +08:00
只要用 new 就免不了有内存泄漏,除非你特别特别特别的细心
wzzzx
2021-02-18 10:29:21 +08:00
这不是类的成员是智能指针的问题啊,是你外部的问题丫。
你在 new 这个类的时候,也要用智能指针包裹住,能不用裸指针就不要用裸指针。
cabing
2021-02-18 11:18:20 +08:00
@wzzzx 对,为啥还用 new 实例化呢?
alazysun
2021-02-18 12:47:36 +08:00
是的没错。

类对象也要智能指针包含,严格 RAII 处理。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/753768

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX