gpt4 book ai didi

c++ - 对象在构造函数之后不存在?

转载 作者:行者123 更新时间:2023-11-28 01:11:54 25 4
gpt4 key购买 nike

我有一个看起来像这样的构造函数(在 C++ 中):

Interpreter::Interpreter() {
tempDat == new DataObject();
tempDat->clear();
}

dataObject 的构造函数什么都不做,而 clear 做的是:

bool DataObject::clear() {
//clear the object

if (current_max_id > 0) {
indexTypeLookup.clear();
intData.clear();
doubleData.clear();
current_max_id = 0;
}

}

这些成员定义如下:

std::map<int, int> indexTypeLookup;
std::map<int, int> intData;
std::map<int, double> doubleData;

现在奇怪的是我在 tempDat->clear(); 上遇到段错误gdb 说 tempDat 为空。这怎么可能? tempDat 的构造函数不能失败,它看起来像这样:

DataObject::DataObject() : current_max_id(0)
{

}

我知道可能有更好的方法来制作这样的数据结构,但我真的很想知道这个段错误问题是从哪里来的..

最佳答案

Interpreter::Interpreter() {
tempDat == new DataObject(); // <- here
tempDat->clear();
}

您正在使用 == 进行分配。使用 = 代替:

        tempDat = new DataObject();

使用 == 为您提供一个表达式,将 tempDat 的当前值(一些随机垃圾)与新创建的 DataObject 的地址进行比较>。该表达式的结果立即被丢弃,tempDat 保持不变。所以它仍然包含随机垃圾,在您的调试 session 中恰好是 0

关于c++ - 对象在构造函数之后不存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2570901/

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