我在“C++标准库扩展”中遇到问题:
以下是我的答案:
template <typename T>
void nonsence(T*){}
struct SX {
int data;
SX(int i = 0) :
data(i) {
cout << "SX" << endl;
}
~SX() {
cout << "~SX" << endl;
}
};
int main(int argc, char **argv) {
SX* psx=new SX;
shared_ptr<SX> sp1(psx),sp2(psx,nonsence<SX>);
cout<<sp1.use_count()<<endl;
return 0;
}
但我认为这不是一个好的解决方案-因为我不想使用构造函数来解决它。谁能给我更好的一个?
谢谢,原谅我的英语不好。
最佳答案
您需要做的就是从第一个shared_ptr
构造第二个shared_ptr
。
shared_ptr<SX> sp1( new SX );
shared_ptr<SX> sp2( sp1 );
然后,仅当销毁所有创建的SX的共享指针时,才可以将其正确删除。