C++11 では、 a を使用しshared_ptr<>
て、オブジェクトまたは変数との所有関係を確立し、weak_ptr<>
そのオブジェクトを所有されていない方法で安全に参照できます。
unique_ptr<>
オブジェクトまたは変数との所有関係を確立するために使用することもできます。しかし、所有していない他のオブジェクトもそのオブジェクトを参照したい場合はどうなるでしょうか? weak_ptr<>
この場合は役に立ちません。生のポインターは便利ですが、さまざまな欠点があります (たとえば、 nullptr に自動的に初期化できますが、これは型と一致しない手法によって実現されstd::*_ptr<>
ます)。
weak_ptr<>
を介して所有されているオブジェクトへの非所有参照に相当するものは何unique_ptr<>
ですか?
これは、私が取り組んでいるゲームの何かに似た明確な例です。
class World
{
public:
Trebuchet* trebuchet() const { return m_trebuchet.get(); }
private:
std::unique_ptr< Trebuchet > m_trebuchet;
};
class Victim
{
public:
Victim( Trebuchet* theTrebuchet ) : m_trebuchet( theTrebuchet ) {}
~Victim()
{
delete m_trebuchet; // Duh. Oops. Dumb error. Nice if the compiler helped prevent this.
}
private:
Trebuchet* m_trebuchet; // Non-owning.
};
shared_ptr< Victim > createVictim( World& world )
{
return make_shared< Victim >( world.trebuchet() );
}
ここでは、生のポインターを使用して、他の場所で所有されているオブジェクトとの非所有関係を維持しunique_ptr<>
ます。しかし、生は私たちができる最善のことですか?
希望は、次のようなポインターの型です。
- 他の最新のポインター型のように見えます。例
std::raw_ptr<T>
。 - 生のポインターを置き換えて、全体で最新のポインター型を使用するコードベースが(大まかに)を検索してすべてのポインターを見つけることができるようにします。
_ptr<
- nullptr に自動初期化します。
したがって:
int* p; // Unknown value.
std::raw_ptr< int > p; // null.
この型は現在 C++ に既に存在していますか、それは将来的に提案されていますか、それとも Boost などで広く利用可能な別の実装ですか?