「The C++ Standard Library Extensions」の問題があります。
練習問題 6
セクション 2.4.2 で、同じポインターから 2 つの shared_ptr オブジェクトを作成してはならないと言いました。危険なのは、shared_ptr オブジェクトまたはその子孫の両方が最終的にリソースを削除しようとすることであり、通常はこれが問題を引き起こします。実際、気をつけていれば、これを行うことができます。特に便利ではありませんが、同じポインターから 2 つの shared_ptr オブジェクトを作成し、リソースを 1 回だけ削除するプログラムを作成してください。
以下は私の答えです:
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、私の悪い英語を許してください。