构造函数不能使用make_shared <t>()

时间:2017-10-21 19:31:05

标签: c++ constructor

我必须在以下代码中弄错。我正在进行实验,并且无法理解为什么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。我向你提供帮助。

1 个答案:

答案 0 :(得分:0)

这是因为here = make_shared();正在调用类构造函数 并在构造函数中调用它将对构造函数进行递归调用,从而导致分段错误 我们需要在构造函数外部调用它以避免编译器抱怨。