我认为你是困惑,指针的行为...也许?很难破译你所问的。
我会考虑用刺虽然下面的解释:
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'拥有的对象的新副本。 –