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

标签 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;
}

当我运行这个 main

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

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

感谢任何帮助。

最佳答案

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

关于C++:Shared_Ptr 在虚拟方法调用上出现段错误,但不是取消引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31032707/

相关文章:

java - 如何获得一个类来实现这个gestureRecogniser?

c++ - 共享指针无需分配即可工作

c++ - std::getline 读取最后一个字符串两次

java - 当子类对象被指定为父类(super class)对象时会发生什么

c++ - 如何取回长整数的两个分量

haskell - Haskell 中的多态性

c++ - new 和 make_shared 用于共享指针

c++ - boost::shared_ptr 和分配派生类

c++ - 从文件读取到二叉树并写入文件

c++ - C/C++ 字符串文字中的未知元字符?