gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:32:01 25 4
gpt4 key购买 nike

目前我的代码是这样的:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com