我必须在以下代码中弄错。我正在进行实验,并且无法理解为什么make_shared
无法在构造函数中调用,而在initialize()
中,它可以正常工作
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;
}
当我运行它时,我得到exitcode -1。我向你提供帮助。
答案 0 :(得分:0)
这是因为here = make_shared();
正在调用类构造函数
并在构造函数中调用它将对构造函数进行递归调用,从而导致分段错误
我们需要在构造函数外部调用它以避免编译器抱怨。