首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >指向指针内存管理的唯一指针

指向指针内存管理的唯一指针
EN

Stack Overflow用户
提问于 2022-09-07 21:42:19
回答 1查看 134关注 0票数 0

函数f分配以unique_ptr<char*>形式返回的几个字节。这个智能指针有多“聪明”?当返回的unique_ptr超出作用域时,这些分配的字节是否返回给系统?

这里的托管对象是一个指针(char*),而不是它指向的字节!(因此对数组进行专门化)

应答 @Miles

不是的。以unique_ptr<char[]>为例。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-07 21:52:23

std::unique_ptr是一个非常简单的类模板。它所做的就是存储指针和delete (在数组中是delete[] ),该指针在析构函数中指向的对象。

也就是说,它看起来像这样(稍微简化):

代码语言:javascript
运行
复制
template <typename T>
class unique_ptr
{
private:
    T* ptr_;

public:
    unique_ptr(T* ptr)
      : ptr_{ptr}
    {}

    ~unique_ptr()
    {
        delete ptr_;
    }

    // Other constructors and member functions omitted for brevity
};

正如您所看到的,它所做的只是delete它所持有的指针直接指向的对象。如果该对象本身就是一个指针,那么该指针所指向的任何数据都不会得到deleted。

如果要将智能指针返回到已分配的char数组,则应创建直接指向数组中的第一个charstd::unique_ptr<char[]>。如果您真的想要额外的间接方向,那么如果您希望底层数组在std::unique_ptr<std::unique_ptr<char[]>>超出作用域时使delete[]生效,那么您将需要类似于unique_ptr的东西。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73641731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档