[解決済み] C++のstd::shared_ptrが空である場合とヌルである場合の違いは何ですか?
質問
その
cplusplus.com
shared_ptr
ページ
の区別を呼び出します。
空の
std::shared_ptr
そして
ヌル
shared_ptr
. は
cppreference.com のページ
はその区別を明示的に呼び出していませんが、 "empty"と比較の両方を使用しています。
nullptr
の説明の中で
std::shared_ptr
の動作の説明で
空とNULLの違いはありますか?
shared_ptr
? このような混合動作のポインタのユースケースはあるのでしょうか?空でないヌル
shared_ptr
は意味をなすのでしょうか?通常の使用において(つまり、明示的に構築しなかった場合)、空でありながら NULL でない
shared_ptr
?
また、C++11版ではなくBoost版を使っている場合、これらの答えは何か変わるのでしょうか?
どのように解決するのですか?
の変なコーナーです。
shared_ptr
の挙動に影響を与えます。これにはコンストラクタがあり、それを使って
shared_ptr
その
を所有する
と
を指し示す
を指しています。
template< class Y >
shared_ptr( const shared_ptr<Y>& r, T *ptr );
は
shared_ptr
はこのコンストラクタを使って構築された
所有権の共有
と
r
が、しかし
を指しています。
何であれ
ptr
を指している(つまり
get()
または
operator->()
が返されます。
ptr
). これは
ptr
が所有するオブジェクトのサブオブジェクト(例えば、データメンバー)を指している場合、便利です。
r
.
リンク先のページでは
shared_ptr
を呼び出していますが、これは何も所有していない
空の
であり、かつ
shared_ptr
は何も指していない(つまり、その
get() == nullptr
)
ヌル
. (
空
は、規格上この意味で使われています。
空
はそうではありません)。null-but-not-emptyを構成することができます。
shared_ptr
を構成することはできますが、それはあまり便利ではありません。空の、しかし空でない
shared_ptr
は本質的に非所有ポインタであり、それを使って次のような奇妙なことをすることができます。
を期待する関数に、 スタック上に確保された何かへのポインタを渡すといった奇妙なことに使うことができます。
shared_ptr
を期待する関数にポインタを渡すことです (ただし、私は
shared_ptr
をAPI内に置いた人を先に殴ることをお勧めします)。
boost::shared_ptr
また
にはこのコンストラクタがあります。
を呼び出します。
エイリアシングコンストラクタ
.
関連
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] コピーアンドスワップ慣用句とは?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] C++11の'typedef'と'using'の違いは何ですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。