簡體   English   中英

指針“ this”可以是共享指針嗎?

[英]Can pointer 'this' be a shared pointer?

我對C ++中的this指針有疑問。

如果我創建一個指針,

std::shared_ptr<SomeClass> instance_1;

instance_1this指針還是共享指針嗎?

我問這個問題的原因是,如果我使用指針this在其方法中啟動另一個線程。 它會復制shared_ptr嗎?

instance_1this指針還是共享指針嗎?

號的this指針是指向對象的指針的當前實例,它指向相同的共享對象在這種情況下,共享的指針。 但這本身不是shared_ptr 它是SomeClass*類型的。

我問這個問題的原因是...

要創建shared_ptrthisSomeClass ,必須從導出std::enable_shared_from_this 然后就可以使用了;

shared_from_this() ; 返回一個共享了*this所有權的shared_ptr

在線程之間共享這種狀態時,請注意競爭條件和鎖定問題等。

不,你不能讓this是一個共享的指針。 最近的事情是從std::enable_shared_from_this繼承並通過調用獲取共享指針:

this->shared_from_this();

細節可以在這里找到

另一種方法是使用侵入共享指針,如boost::intrusive_ptr ,在this將不被共享,雖然指針,但可以轉換為一個。

不能。創建指向對象的共享指針不會使this對象成為共享指針。

如果你想從一個共享指針this ,你可能要至少考慮使用std::enable_shared_from_this

不, this始終是原始指針。 如果您希望另一個線程擁有shared_ptr的副本,則必須為其提供instance_1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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