Ich muss über etwas im folgenden Code verwechselt werden. Ich experimentiere, und konnte nicht verstehen, warum die make_shared
kann nicht im Konstruktor aufgerufen werden, wo wie in initialize()
, es funktioniert gutKonstruktor kann nicht verwenden 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;
}
Als ich das laufen, bekomme ich Exit-Wert -1. Ich appreate deine Hilfe.
Der Konstruktor von A verwendet make_shared, das ein neues A-Objekt erstellt, das den Aufruf von A's-Konstruktor beinhaltet ... - unendliche Wiederholung. – navyblue
@navyblue das wäre eine Antwort gewesen ... Ich denke, es war eine triviale Frage an dich. Danke, – user7865286
auf einen Hinweis ... Sie könnten interessiert sein an 'std :: shared_from_this' – pqnet