gpt4 book ai didi

c++ - unique_ptr 构造函数是否初始化原始指针并且 unique_ptr 析构函数是否删除关联的原始指针?

转载 作者:搜寻专家 更新时间:2023-10-31 00:50:29 26 4
gpt4 key购买 nike

我第一次在我的项目中使用智能指针。在使用 unique_ptr 时,我对 unique_ptr 和原始指针组合有一些疑问。以及 unique_ptr 内部工作的方式。

有人可以根据我的理解解释/回答如下所述,以便我可以继续使用智能指针。

示例如下:

class A 
{
public:
void show()
{
cout<<"A::show()"<<endl;
}
};

int main()
{
unique_ptr<A> p1 (new A);

p1 -> show();

// returns the memory address of p1
cout << p1.get();

retrun 0;

}

从上面的例子中,

  1. 在创建 unique_ptr 对象“p1”时,我们提供原始指针。在内部,unique_ptr 构造函数将使用原始指针初始化 unique_ptr。我的理解正确吗?

  2. 根据 unique_ptr 定义,“指针专为一个对象或资源所有”。

    根据上面的说法,在我们的场景中,“原始指针”是独占的由 unique_ptr 对象“p1”拥有。我说得对吗?

  3. 同样在语句之后,cout << p1.get(); (在上面的示例程序中)当它超出范围时,在内部调用 unique_ptr 的析构函数并删除关联的原始指针。我的理解正确吗?

  4. 最后,一旦删除关联的原始指针,unique_ptr对象是否会变空?

最佳答案

When creating unique_ptr object "p1" we are providing raw pointer. Internally, unique_ptr constructor will initialize the unique_ptr with the raw pointer. Is my understanding correct?

是的。唯一指针将保存相同的地址。

As per the unique_ptr definition, "The pointer is exclusively owned by one object or a resource".

Based on the above statement, in our scenario, "raw pointer" is exclusively owned by the unique_ptr object "p1". Am I correct?

是的。唯一的引用,即拥有资源并将释放它的引用,是唯一指针。但是请注意,拥有的不是指针,而是它指向的对象。 unique_ptr 没有获得原始指针的所有权,它获得了原始指针提供的地址处的对象(资源)的所有权。

And also after the statement, cout << p1.get(); (In the above sample program) as it is going out of scope, internally, the destructor of the unique_ptr called and it deletes the associated raw pointer. Is my understanding correct?

是的。 unique ptr 超出范围时会导致删除其内部原始指针。

Finally, once deletes the associated raw pointer is the unique_ptr object will become empty?

不必。由于删除发生在 unique_ptr 对象本身被销毁时,因此没有真正需要“清空”它。无论如何它都将不复存在,因此它的值(value)并不重要。

关于c++ - unique_ptr 构造函数是否初始化原始指针并且 unique_ptr 析构函数是否删除关联的原始指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57371570/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com