[解決済み] const shared_ptr<T>` と `shared_ptr<const T>` の違い?
2022-07-09 18:29:04
質問
C++で共有ポインタのアクセサメソッドを書いているのですが、以下のような感じです。
class Foo {
public:
return_type getBar() const {
return m_bar;
}
private:
boost::shared_ptr<Bar> m_bar;
}
の定数性をサポートするために
getBar()
をサポートするために、戻り値の型は
boost::shared_ptr
を変更できないようにすること。
Bar
を指している。私の
推測
は
shared_ptr<const Bar>
はそのために返したい型であるのに対し
const shared_ptr<Bar>
を指すようにポインタを再指定することを防ぎます。
Bar
を指すようにポインタを変更することはできませんが
Bar
を変更できるようにすることです... しかし、私は確信が持てません。確かなことを知っている人がこれを確認するか、私が間違っていたら訂正してくれるとありがたいのですが。ありがとうございます。
どのように解決するのですか?
その通りです。
shared_ptr<const T> p;
が似ているのは
const T * p;
(あるいは、同等に
T const * p;
)、つまり、指摘されたオブジェクトは
const
であるのに対し
const shared_ptr<T> p;
は
T* const p;
ということは
p
は
const
. まとめると
shared_ptr<T> p; ---> T * p; : nothing is const
const shared_ptr<T> p; ---> T * const p; : p is const
shared_ptr<const T> p; ---> const T * p; <=> T const * p; : *p is const
const shared_ptr<const T> p; ---> const T * const p; <=> T const * const p; : p and *p are const.
の場合も同様です。
weak_ptr
と
unique_ptr
.
関連
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み] std::string を const char* または char* に変換する方法
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
-
[解決済み] Static readonly」対「const」。
-
[解決済み] 私的相続、公的相続、保護相続の違いについて
-
[解決済み] g++とgccの違いは何ですか?
-
[解決済み] constexpr` と `const` の相違点
最新
-
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++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?