我的C的简化版本++类:显式析构函数调用不工作
我的单元测试的class Class
{
public:
Class(uint32_t size_, uint8_t val_) buf(NULL), size(size_)
{
buf = new uint8_t[size];
memset(buf, val_, size);
}
~Class()
{
if(buf != NULL)
{
delete[] buf;
buf = NULL;
size = 0;
}
}
void FakeDtor()
{
if(buf != NULL)
{
delete[] buf;
buf = NULL;
size = 0;
}
}
protected:
uint8_t* buf;
uint32_t size;
}
代码:
TEST_F(Classtest, testDestructor)
{
Class *buff = new Class(10,10);
ASSERT_NE(buff->getData(), (uint8_t*)NULL);
buff->~Class(); // buff->FakeDtor();
ASSERT_EQ(buff->getData(), (uint8_t*)NULL);
}
当我使用的MSBuild编译代码并运行UT - 显式调用析构函数工程和UT通行证。当我使用g ++编译并使用gtest运行UT时 - 显式调用dtor似乎失败了,因为在断言失败后。当我使用FakeDtor()而不是〜Class()时,UT在Windows和Linuix上同时通过。当在Linux下调用它时,什么会导致dtor不执行?
你不能直接调用析构函数。 如果你不想销毁该对象使用'删除' –
@JonasJuffinger是的,你可以。但你通常不应该。 –
@JonasJuffinger:允许手动调用析构函数。这是一种正常的操作,特别是如果您使用new-at操作符来创建对象。 – Klaus