簡體   English   中英

是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;

}

從以上示例中,

  1. 當創建unique_ptr對象“ p1”時,我們將提供原始指針。 在內部,unique_ptr構造函數將使用原始指針初始化unique_ptr。 我的理解正確嗎?

  2. 按照unique_ptr定義,“指針完全由一個對象或資源擁有”。

    基於以上陳述,在我們的場景中,“原始指針”由unique_ptr對象“ p1”專有。 我對么?

  3. 而且在聲明之后,cout << p1.get(); (在上面的示例程序中)由於超出范圍,在內部調用了unique_ptr的析構函數,並刪除了關聯的原始指針。 我的理解正確嗎?

  4. 最后,一旦刪除了關聯的原始指針,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM