1

shared_ptr に関する奇妙な事実に気付きました

int* p = nullptr;
std::shared_ptr<int> s(p); // create a count (1).
std::shared_ptr<int> s2(s); // count go to 2.
assert(s.use_count() == 2);

これ以上のセマンティックは何だろう。s と s2 が nullptr を共有しているのはなぜですか? それは意味がありますか?

それとも、この珍しい状況は if ステートメントに値しない (コストがかかる?) でしょうか?

啓発をありがとう。

4

3 に答える 3

1

彼らが共有していることを誰が気にしnullptrますか?それらが両方とも破壊されるとすぐに、どちらがdelete nullptr;効果がないかを試みます。それは完全に問題なく、 のセマンティクスに適合しshared_ptrます。

NULL ポインター値に特別なケースが必要ないという点で理にかなっています。コードで発生するかどうかは、null を受け取るか返すことができる関数があるかどうかにかかっていますshared_ptr

于 2013-04-07T20:35:22.937 に答える