C++ 如何在gtest中断言_TRUE后释放内存
我有一个用例场景C++ 如何在gtest中断言_TRUE后释放内存,c++,googletest,C++,Googletest,我有一个用例场景 List* pList = new List(); for (...) { Integer* pInt = new Integer(); ASSERT_TRUE(pInt != NULL); pList->Add(*pInt); } 现在,如果在任何迭代中pInt为空,那么这个测试用例将停止,并且pList将不会被释放 当执行ASSERT\u TRUE时,有没有办法释放pList 谢谢如果您可以使用lambdas,您可以: ASSERT\u TRUE(
List* pList = new List();
for (...)
{
Integer* pInt = new Integer();
ASSERT_TRUE(pInt != NULL);
pList->Add(*pInt);
}
现在,如果在任何迭代中pInt
为空,那么这个测试用例将停止,并且pList
将不会被释放
当执行ASSERT\u TRUE
时,有没有办法释放pList
谢谢如果您可以使用lambdas,您可以:
ASSERT\u TRUE(品脱!=nullptr)
string{delete pList;返回“您的错误消息”。;}();
只有在断言失败时才执行lambda
但是,最好的选择可能是使用std::unique_ptr
或类似的智能指针,而不是原始指针,并完全避免这种担心
现在,如果在任何迭代中pInt
为空,那么这个测试用例将停止,并且pList
将不会被释放
假设您没有重写new
操作符(如果您重写了,您可能不会问这个问题),并且假设您的编译器没有错误,pInt
将永远不会为空。失败时,new
抛出一个std::bad_alloc
异常,它不返回null
此外,断言适用于应该始终保持不变的事物(事实就是如此),无论发生什么。断言失败是一个bug。在断言失败后添加代码进行清理没有意义:只需修复错误即可
现在来谈谈自由。。。提供的示例代码可以是:
所有资源管理的答案是:RIIA。在现代C++中,不要再编写<代码>新<代码> >代码>删除< /代码>(除了<代码>删除> <代码> >
List pList;
for (...)
{
Integer pInt = Integer();
pList.Add(pInt);
}