函数f
分配以unique_ptr<char*>
形式返回的几个字节。这个智能指针有多“聪明”?当返回的unique_ptr
超出作用域时,这些分配的字节是否返回给系统?
这里的托管对象是一个指针(char*
),而不是它指向的字节!(因此对数组进行专门化)
应答 @Miles
不是的。以unique_ptr<char[]>
为例。
发布于 2022-09-07 21:52:23
std::unique_ptr
是一个非常简单的类模板。它所做的就是存储指针和delete
(在数组中是delete[]
),该指针在析构函数中指向的对象。
也就是说,它看起来像这样(稍微简化):
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
它所持有的指针直接指向的对象。如果该对象本身就是一个指针,那么该指针所指向的任何数据都不会得到delete
d。
如果要将智能指针返回到已分配的char
数组,则应创建直接指向数组中的第一个char
的std::unique_ptr<char[]>
。如果您真的想要额外的间接方向,那么如果您希望底层数组在std::unique_ptr<std::unique_ptr<char[]>>
超出作用域时使delete[]
生效,那么您将需要类似于unique_ptr
的东西。
https://stackoverflow.com/questions/73641731
复制相似问题