【发布时间】:2009-05-16 03:02:05
【问题描述】:
我有一个来自“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,请原谅我的英语不好。
【问题讨论】:
-
您在 SX 构造函数中缺少“{”。 (只是为了迂腐)
标签: c++ shared-ptr tr1