是unique_ptr构造函数初始化原始指针,还是unique_ptr析构函数删除关联的原始指针?

约翰·保罗·编码

第一次在项目中使用智能指针。在使用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对象将变为空吗?

讲故事的人-Unslander Monica

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

是。唯一指针将拥有相同的地址。

按照unique_ptr定义,“指针完全由一个对象或资源拥有”。

基于以上陈述,在我们的场景中,“原始指针”由unique_ptr对象“ p1”专有。我对么?

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

而且在声明之后,cout << p1.get(); (在上面的示例程序中)由于超出范围,在内部调用了unique_ptr的析构函数,并删除了关联的原始指针。我的理解正确吗?

是。唯一的ptr在超出范围时将导致其内部原始指针的删除。

最后,一旦删除关联的原始指针,unique_ptr对象将变为空吗?

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

初始化std :: unique_ptr作为原始数组指针的初始化

如何从原始C堆内存指针初始化unique_ptr?

使用本地原始指针初始化std :: unique_ptr时会发生什么?

从本地原始指针初始化 std::unique_ptr 是否安全?

std :: unique_ptr析构函数构造函数顺序

在将其移入基类构造函数之前,如何从unique_ptr中提取原始指针

unique_ptr析构函数的优势

std :: unique_ptr是否在其析构函数中将其基础指针设置为nullptr?

无法使用std :: unique_ptr初始化指针

使用将unique_ptr移动到相同对象构造的基类之后,使用指向对象的原始指针初始化字段

c ++ 11成员函数从unique_ptr的向量返回原始指针的向量

unique_ptr :: release()是否调用析构函数?

使用unique_ptr保护的析构函数

unique_ptr 两次调用析构函数

unique_ptr 比原始指针快吗?C++

将此原始指针情况转换为unique_ptr?

如何将unique_ptr移到原始指针?

Unique_ptr与原始指针的不同行为

将数组的原始指针转换为unique_ptr

从std :: unique_ptr数组获取原始指针数组

将unique_ptr分配给原始指针

在销毁原始unique_ptr之后,由unique_ptr <T> :: get()返回的指针不是nullptr。

在构造函数中使用C ++中的unique_ptr初始化向量

我是否需要在构造函数中显式初始化std :: unique_ptr?

std :: list <std :: unique_ptr>:空的初始化列表与默认构造函数

C ++ / Pimpl:原始指针还是unique_ptr?有什么更好的选择?

删除函数unique_ptr

如果A有析构函数,std :: unique_ptr <A>什么时候需要特殊的删除器?

是否可以在构造函数的初始化程序列表中初始化std :: unique_ptr的std :: array?