zoukankan      html  css  js  c++  java
  • 何时使用智能指针,何时使用原始指针

    智能指针:责对象生命周期的管理;所以生命期对象全都由unique_ptr和shared_ptr来管理。

    原始指针:不负责对象生命周期管理;所以涉及对象的使用而不涉及对象生命周期的管理时,均通过原始指针来使用。


    智能指针和原始指针进行转换和传参时可能存在被意外释放的问题,使用时需要注意。比如,

    • 对智能指针A获取原始指针a,传入某函数,函数内重新用a包装出智能指针B,那么函数退出B被销毁时,a所指资源已被释放,原智能指针A无法正常使用。(如果资源在栈上将导致程序崩溃)

    • 原始指针a指向某资源,它被包装成智能指针A后传给某函数,函数结束时A被销毁,所指向的资源也被释放,此时a也无法再使用。


    所以,

    对于一个接受原始指针的函数(或代码块),切记不可再将传入的原始指针包装为智能指针。

    对于一个接受智能指针的函数(或代码块),切记不要直接将原始指针就地包装传入,而应该一开始就使用智能指针而非原始指针管理对象。

  • 相关阅读:
    C# 中的栈和堆
    C# 中的基本数值类型
    多个 .NET 框架
    简单介绍托管执行和 CLI
    C# 控制台输入和输出
    在 C# 中使用变量
    C# 语法基础
    LeetCode 1482. 制作 m 束花所需的最少天数
    C# 基础(更新中)
    圆形靶内的最大飞镖数量
  • 原文地址:https://www.cnblogs.com/dylanchu/p/12318189.html
Copyright © 2011-2022 走看看