次のコードでは、何かについて間違えています。私はこれを実行すると、私は終了コードを取得-1 コンストラクターではmake_sharedを使用できません<T>()
class A {
public:
A() {
here = make_shared<A>();
}
void initialize(){
// here = make_shared<A>();
cout << &*here << endl;
cout << &here << endl;
}
void hereAddress() {
cout << &*here << endl;
}
private:
shared_ptr<A> here;
};
int main(){
vector<shared_ptr<A> > myA;
cout << "hi" << endl;
for (int i = 0; i < 10 ; ++i) {
myA.push_back(make_shared<A>());
}
for (const auto& i : myA) {
i->initialize();
i->hereAddress();
}
return 0;
}
試した、と
make_shared
はコンストラクタで呼び出すことができない理由を理解することができませんでした、
initialize()
のように、それが正常に動作どこ。私はあなたの助けを肯定します。
Aのコンストラクタは、Aのコンストラクタを呼び出すことを含む新しいAオブジェクトを作成するmake_sharedを使用します。 - 無限回帰。 – navyblue
@navyblueこれは答えだったでしょう...私はそれがあなたにとって些細な疑問だったと思います。ありがとう – user7865286
注...あなたは 'std :: shared_from_this'に興味があるかもしれません – pqnet