26
class MyClass {
public:
     MyClass(std::weak_ptr<MyClass> parent){}
}

私はこれをしたい:

auto newInstance = std::make_shared<MyClass>(nullptr);

または、weak_ptr 引数のデフォルト値は次のように null です。

void function(int arg,std::weak_ptr<MyClass> obj = nullptr);

しかし、私が必要とするのは、代わりにこれを行うことです:

auto newInstance = std::make_shared<MyClass>(std::shared_ptr<MyClass>(nullptr));

何故ですか?

4

2 に答える 2

41

概念内の aは、別のorweak_ptrからのみ構築できるためです。それがそうであるかどうかにかかわらず、生のポインターから構築することは意味がありません。weak_ptrshared_ptrnullptr

使用しようとしているデフォルトの構築されたweak_ptr( std::weak_ptr<MyClass>()) を使用できますnullptr

auto newInstance = std::make_shared<MyClass>(std::weak_ptr<MyClass>());
void function(int arg,std::weak_ptr<MyClass> obj = std::weak_ptr<MyClass>());
于 2012-07-01T12:28:46.123 に答える
-3

通常、弱いポインターの主な目的は、他のコードによって破棄される可能性のあるオブジェクトがまだ存在するかどうかを知ることです。通常のポインターから構築された弱いポインターは、オブジェクトがまだ存在するかどうかをどのように知ることができますか? これがうまくいく方法を想像できますか?

于 2012-07-01T12:37:10.080 に答える