我在 C++ 中有一个奇怪的“析构函数”行为
这是我调用的代码:
_log->OnCommit();
delete _log;
问题是当我调用“delete _log;”时它崩溃是因为变量“条目”无效!!!!
你知道为什么吗?
这是我的类(class)代码:
struct TransactionLogEntry {
DependencyObject* Object;
bool IsAttached;
bool IsDeleted;
bool IsUpdated;
};
class TransactionLog
{
public:
TransactionLog();
~TransactionLog();
void OnCommit();
map<DependencyObject*, TransactionLogEntry*> Entries;
};
void TransactionLog::OnCommit()
{
map<DependencyObject*, TransactionLogEntry*>::iterator it;
for(it = Entries.begin(); it != Entries.end(); it++)
{
TransactionLogEntry* entry = (TransactionLogEntry*)(*it).second;
if (entry->IsDeleted)
delete entry->Object;
delete entry;
}
Entries.clear();
}
TransactionLog::~TransactionLog()
{
map<DependencyObject*, TransactionLogEntry*>::iterator it;
for(it = Entries.begin(); it != Entries.end(); it++)
{
TransactionLogEntry* entry = (TransactionLogEntry*)(*it).second;
delete entry;
}
Entries.clear();
}
最佳答案
如果没有完整的代码很难看清,但是我可以注意到您违反了三巨头规则(您有一个析构函数,但没有复制构造函数或赋值运算符),这意味着自找麻烦。
我的大胆猜测是您正在复制构建日志或其他类似问题,一旦您进入 UB 模式,那么任何事情都可能发生,包括在应该没问题的地方引发错误。
关于C++析构函数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4886405/