第一次在项目中使用智能指针。在使用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;
}
从上面的例子中
当创建unique_ptr对象“ p1”时,我们将提供原始指针。在内部,unique_ptr构造函数将使用原始指针初始化unique_ptr。我的理解正确吗?
按照unique_ptr定义,“指针完全由一个对象或资源拥有”。
基于以上陈述,在我们的场景中,“原始指针”由unique_ptr对象“ p1”专有。我对么?
而且在声明之后,cout << p1.get(); (在上面的示例程序中)由于超出范围,在内部调用了unique_ptr的析构函数,并删除了关联的原始指针。我的理解正确吗?
最后,一旦删除关联的原始指针,unique_ptr对象将变为空吗?
当创建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] 删除。
我来说两句