shared_ptr
デフォルトで構築された (空)は自動的に に初期化されると、あるブログで読みました。nullptr
しかし、標準ではそのような明示的な記述を見つけることができませんでした。
これを確認するために、小さなスニペット (Linux コンパイル) を作成しました。
#include <iostream>
#include <memory>
struct Base;
int main()
{
std::shared_ptr<Base> p;
Base* b;
if (p == nullptr) {
std::cout << "p IS NULL \n";
}
else {
std::cout << "p NOT NULL \n";
}
if (b == nullptr) {
std::cout << "b IS NULL \n";
}
else {
std::cout << "b NOT NULL \n";
}
return 0;
}
出力:
p IS NULL b NOT NULL
このことから、スマート ポインターはnullptr
宣言時に暗黙的に割り当てられていることがわかります。この動作を確認できる人はいますか?shared_ptr
手動で a を割り当てずにa を使用するのは安全ですかnullptr
?
ベストアンサー1
はい、cppreferenceデフォルト コンストラクターは、nullptr
コンストラクターに a を渡すだけと同じであることがわかります。
constexpr shared_ptr() noexcept; (1)
constexpr shared_ptr( std::nullptr_t ) noexcept; (2)
1-2) 管理対象オブジェクトを持たないshared_ptrを構築する、つまり空のshared_ptrを構築する
23.11.2.2.1
shared_ptr
コンストラクタ...
constexpr shared_ptr() noexcept;
2効果:空の オブジェクトを構築しますshared_ptr
。3
事後条件:use_count() == 0 && get() == nullptr
。