Boost shared_ptr が 2 つある
shared_ptr<X> A(new X);
shared_ptr<X> B(new X);
そして、最初は A と同じ X を指す 3 番目のポインター。
shared_ptr<X> C = A;
B と同じ X を指すように C を変更する正しい方法は何ですか?
C = B;
Boost shared_ptr が 2 つある
shared_ptr<X> A(new X);
shared_ptr<X> B(new X);
そして、最初は A と同じ X を指す 3 番目のポインター。
shared_ptr<X> C = A;
B と同じ X を指すように C を変更する正しい方法は何ですか?
C = B;
EdChmは正しいです。それを明示するための小さなテストプログラムを作成しました。C++ 11 を使用しますが、簡単に転置できます。
#include <iostream>
#include <memory>
int main()
{
std::shared_ptr<int> A(new int(1));//creates a shared pointer pointing to an int. So he underlying int is referenced only once
std::shared_ptr<int> B(new int(2));//creates another shared pointer pointing to another int (nothing to do with the first one so the underlying int is only referenced once
std::shared_ptr<int> C;//creating a shared pointer pointing to nothing
std::cout<<"Number of references for A "<< A.use_count()<<std::endl;
std::cout<<"A points to "<<*(A.get())<<std::endl;
std::cout<<"Number of references for B "<< B.use_count()<<std::endl;
std::cout<<"A points to "<<*(B.get())<<std::endl;
std::cout<<"Number of references for C "<< C.use_count()<<std::endl;
std::cout<<"Now we assign A to C"<<std::endl;
C=A; // now two shared_ptr point to the same object
std::cout<<"Number of references for A "<< A.use_count()<<std::endl;
std::cout<<"A points to "<<*(A.get())<<std::endl;
std::cout<<"Number of references for C "<< C.use_count()<<std::endl;
std::cout<<"C points to "<<*(C.get())<<std::endl;
std::cout<<"Number of references for B "<< B.use_count()<<std::endl;
std::cout<<"B points to "<<*(B.get())<<std::endl;
return 0;
}
この例は、主にこのリンクからインスピレーションを得ています。 http://www.cplusplus.com/reference/memory/shared_ptr/shared_ptr/
お役に立てば幸いです。詳細についてはお気軽にお問い合わせください。