我在“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的共享指针时,才可以将其正确删除。

10-04 14:23