短篇小说。 。 。我试图覆盖新的和删除操作符。似乎是新的好,但是,我删除有问题,此位的代码如何覆盖“标量删除析构函数()”?
cCellList::~cCellList()
{
STPINT loop;
for (loop = 0; loop < count; loop++)
{
delete cells[loop];
}
free(cells);
}
的删除此处不会重写我的delete操作符,这样的事情是不工作了。堆栈跟踪说
ExeName.exe!Cell::'scalar deleting destructor'()
ExeName.exe!cCellList::~cCellList()
ExeName.exe!Cell::'scalar deleting destructor'()
正在执行的代码行是
delete cells
其中cells
是cCellList *
类型。
长的故事。我一直在研究这个可执行文件近20年,兼职,它有大约14 MB的源代码。所有非托管C++,目前使用VS2010。我开始使用名为“Think C with Object-oriented extensions”的编译器。可能很多人太年轻,不能记住那些日子。
有些地方存在内存管理问题,有时会导致奇怪的事情发生。我很久以前就通过了Purify等第三方解决方案可以用于此计划的观点。当我尝试编写代码时,他们只是在弹。所以我写了自己的malloc/free,并且将它们挂钩以更好地跟踪内存中发生的事情。到目前为止,我正在用自己的系统分配所有的内存,但在这种情况下,它将以正常的“自由”而不是我的方式进行,并具有可预测的结果。
如果你已经编写了大于20年的代码,你应该知道如何创建一个最小的测试用例。请创建一个,然后在这里发布,然后我们可以帮助你! – 2012-03-15 00:29:25
另请参阅此问题:http://stackoverflow.com/questions/4948339/why-is-a-scalar-deleting-destructor-being-called-as-a-result-of-vector-delete-on。 – 2012-03-15 00:30:18
你已经编写了将近20年的代码,而且你正在“编写你自己的malloc/free”,并且不知道如何在C++中使用operator new重载? – 2012-03-15 00:34:06