目前我的代码是这样的:
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/