vector<ClassX> xVec;
if (inputFile.peek() == '$')
{
classX classXInstance; //<==================== local instantiation
readFileElements(classXInstance);//<== pass by reference
if(classXInstance.validate())
{
xVec.push_back(classXInstance);///<=============== added here
}
/// destructor of the local copy is called here
}
我得到一个核心转储,试图调试,但是我收到了很多 gdb 的垃圾消息,我只能看到 vector 被破坏了,不确定是否因为调用了析构函数是一个原因??
编辑:
我的类(class)是这样的
class ClassX
{
public:
ClassX() { numberOfX=0; ppXX = NULL; };
~ClassX();
void validate();
char **setX(const vector<string>& Xss);
inline char **getX() {return ppXX;};
private:
int numberOfX;
char **ppXX;
};
它包含一个如下的析构函数
ClassX::~ClassX()
{
if (ppXX != NULL)
{
for(int i=0; i < numberOfXX; i++)
{
if (ppXX[i] != NULL)
{
delete [] ppXX[i];
ppXX[i] = NULL;
}
}
// Free array of pointers.
delete [] ppXX;
ppXX = NULL;
}
}
setX 分配所有必要的内存
验证给我 ppXX[i] 的打印输出,如果元素数量与字符串 vector 的大小匹配则返回 true
最佳答案
一份 classXinstance
存储在 xVec
中, 用指针 ppXX
到内存中的一个区域。现在您有两个指向同一区域的对象。片刻之后,classXinstance
被摧毁,所以该地区受制于delete
. xVec 中的元素现在指向无效内存。
最好的选择是使用 std::Vector<std::string>
而不是 char **ppXX
;字符串 vector 负责引用和分配,因此您无需担心正确的构造/复制/销毁。
关于c++ - 类范围问题的 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18359028/