V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
V2WT
V2EX  ›  问与答

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

  •  
  •   V2WT · 2021-02-18 01:30:51 +08:00 · 986 次点击
    这是一个创建于 1381 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    类对象也要智能指针包含,严格 RAII 处理。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2541 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 15:43 · PVG 23:43 · LAX 07:43 · JFK 10:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.