构造函数是否unique_ptr初始化原始指针unique_ptr析构函数是否也删除关联的原始指针?
Is unique_ptr constructor initializes the raw pointer and also unique_ptr destructor deletes the associated raw pointer?
我第一次在我的项目中使用智能指针。在使用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;
}
从上面的例子中,
创建对象"p1"unique_ptr时,我们提供原始指针。在内部,unique_ptr构造函数将使用原始指针初始化unique_ptr。我的理解正确吗?
根据unique_ptr定义,"指针由一个对象或资源独占"。
基于上述语句,在我们的场景中,"原始指针"是专用的 由unique_ptr对象"P1"拥有。我说的对吗?
同样在语句之后,cout <<p1.get((;(在上面的示例程序中(由于它超出了范围,因此在内部调用了unique_ptr的析构函数,并删除了关联的原始指针。我的理解正确吗?
最后,一旦删除关联的原始指针,unique_ptr对象是否会变为空?
创建对象"p1"unique_ptr时,我们提供原始指针。在内部,unique_ptr构造函数将使用原始指针初始化unique_ptr。我的理解正确吗?
是的。唯一指针将保存相同的地址。
根据unique_ptr定义,"指针由一个对象或资源独占"。
基于上述语句,在我们的场景中,"原始指针"由unique_ptr对象"p1"独占。我说的对吗?
是的。唯一的引用(拥有资源并将释放资源的引用(是唯一指针。但请注意,拥有的不是指针,而是它指向的对象。unique_ptr没有取得原始指针的所有权,而是取得原始指针提供的地址处的对象(资源(的所有权。
同样在语句之后,cout <<p1.get((;(在上面的示例程序中(由于它超出了范围,因此在内部调用了unique_ptr的析构函数,并删除了关联的原始指针。我的理解正确吗?
是的。当唯一 ptr 超出范围时,将导致删除其内部原始指针。
最后,一旦删除关联的原始指针,unique_ptr对象是否会变为空?
不必。由于删除发生在unique_ptr
对象本身被销毁时,因此实际上不需要"清空"它。无论如何,它即将消失,所以它的价值是无关紧要的。
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- C++中的指针否定 (!ptr == NULL)
- 使用 void 指针:void **ptr.. 如何修改共享内存的值?
- C++ 如何从指向结构的指针将 PTR 返回到 int
- 正确使用std智能指针以确保ptr安全
- 一个唯一的ptr类如何将它的实例指针传递给它的成员对象
- openv Ptr类.指针对象在调用函数后被删除