我的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