C ++:Shared_Ptr在虚方法调用上发生段错误,但不是取消引用

时间:2015-06-24 17:01:50

标签: c++ polymorphism shared-ptr virtual-functions

目前我的代码如下:

class A
{
    public:
    //A(A&&);
    A& operator=(const A&);
    std::vector<std::shared_ptr<B>> myVec;

    int accessMyFunc() {
        return myVec[0]->myFunc();
    }
}

class B
{
    public:
    virtual ~B();
    virtual  int myFunc() const = 0;
}

class C : public B
{
    public:
    virtual int myFunc() const override {/* do stuff*/}
}

A makeanA()
{
    A temp;
    temp.myVec.emplace_back(new C)
    return temp;
}

当我运行这个主要

int main()
{
    A theA;
    theA = makeanA();
    theA.accessMyFunc();
}

我从 - &gt;获得了一个段错误在accessMyFunc中。但是,*myVec[0]不会出现段错误,我已在A的赋值构造函数中检查了shared_ptrs是否正确复制。为什么这个段错误不是取消引用,而是在方法调用上?特别是当赋值构造函数验证lhs和rhs的shared_ptr都指向同一个点时?

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

所以最终我的错误是处理动态/共享库。我在我的main之外的函数中打开了库,所以当函数返回时,它尝试查找虚拟表导致了段错误