我有一个来自“C++ 标准库扩展”的问题:
练习 6
我在 2.4.2 节中说过,你不应该从同一个指针构造两个 shared_ptr 对象。危险在于 shared_ptr 对象或其后代最终都会尝试删除资源,这通常会导致麻烦。事实上,如果你小心的话,你可以做到这一点。它不是特别有用,但是编写一个程序,从同一个指针构造两个 shared_ptr 对象,并且只删除一次资源。
以下是我的回答:
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;
}
但我认为这不是一个好的解决方案——因为我不想通过使用构造函数来解决它。谁能给我一个更好的?thx,请原谅我糟糕的英语。