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);
}