我認爲你是困惑,指針的行爲...也許?很難破譯你所問的。
我會考慮用刺雖然下面的解釋:
std::shared_ptr<int> mySharedPtr(new int(5));
創建一個且只有一個int的實例。
int * myPointer = new int(5);
std::shared_ptr<int> mySharedPtr = myPointer;
也創建了一個且只有一個int實例。
int * myPointer = new int(5);
std::shared_ptr<int> mySharedPtrA = myPointer;
std::shared_ptr<int> mySharedPtrB = mySharedPtrA;
也創建一個且只有一個int實例。
std::shared_ptr<int> mySharedPtrA = std::make_shared<int>(5);
std::shared_ptr<int> mySharedPtrB = mySharedPtrA;
也創建了一個且只有一個int實例。
在所有這些情況下,int的值是5,有一個實例,並且指向int的指針正在傳遞。
int不會被傳遞,指向int的指針是。 int未被複制,指向int的指針正在被複制。
見3號[這裏](http://en.cppreference.com/w/cpp/memory/shared_ptr/shared_ptr)關於第二個問題。我不確定你在第一個問題中要求什麼。 – NathanOliver
您可能想了解['std :: enable_shared_from_this'](http://en.cppreference.com/w/cpp/memory/enable_shared_from_this)。 –
'shared_ptr(raw_pointer)'將把'raw_pointer'指向的現有對象的所有權賦予新的'shared_ptr'。當新的'shared_ptr'及其所有副本被銷燬時,它將被刪除。 「this」引用的對象沒有拷貝。 'std :: make_shared(* this)'會產生新的'shared_ptr'擁有的對象的新副本。 –