[英]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;
}
從以上示例中,
當創建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
對象本身時發生的,因此沒有必要真正清空它。 無論如何它都將不復存在,因此其價值並不重要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.