【发布时间】:2015-08-11 21:53:49
【问题描述】:
又是一个格式错误的问题,但我不知道如何简短地解释这种情况:
我有两节课。我们将它们命名为 A 和 B。A 有很多成员变量和方法。 B 是一个结构,它有一个指向 A 类型对象的 shared_pointer。现在 A 有一个返回 B 实例的方法(带有指向 A 的当前实例的指针)。
我的问题是,A 是 C 的子类。C 具有与上述纯虚拟相同的方法。代码如下所示:
class C {
public:
virtual B mymethod() const =0;
virtual int getMyvar() const =0;
};
class A : public C {
public:
B mymethod() const override;
int getMyvar() const override; //outputs myvar
private:
int myvar;
};
struct B {
std::shared_ptr<C> pointer;
};
B A::mymethod() const {
B instance;
instance.pointer = std::make_shared<A>(*this); //is this wrong?
return instance;
}
我的编译器 (gcc 4.8.2) 为以下代码创建可执行文件,但在运行时我得到“分段错误(核心转储)”:
void AnotherClass::something() const {
A object;
B instance = object.mymethod();
std::cout << instance.pointer->getMyvar(); //dumps the core womehow?
}
我读到了std::enable_shared_from_this,但我不知道它是如何工作的,或者它是否对我有帮助。
为什么我会收到错误消息,我该如何解决这个问题?
【问题讨论】:
-
object.mymethod(); // 你缺少函数调用
-
是的,哈哈... =D 不,这是一个简单的例子。我的脚本太复杂而无法发布,但这个例子很好地解释了它。在我的情况下,我无法到达原始对象... =(
-
好的,抱歉,编辑了XD 刚刚忘记了,但是错误还在=(
-
我无法重现您的问题。您能否发布一个显示错误的完整示例?
-
myvar不在 C 中,即使在 A 中也无法访问。
标签: c++ class pointers shared-ptr coredump