1. ホーム
  2. c++

[解決済み] 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; ということは pconst . まとめると

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_ptrunique_ptr .