我的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时 - 显式调用dtor工作并且UT传递。当我使用g ++使用gtest编译和运行UT时 - 显式调用dtor似乎失败了,因为断言失败后。当我使用FakeDtor()而不是~Class()时,UT会在Windows和Linuix上传递。在Linux下调用它时,什么可能导致dtor不执行?