gpt4 book ai didi

C++ 在不使用智能指针的情况下清理 try catch block 中的内存。

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:22:34 26 4
gpt4 key购买 nike

我正在将异常添加到现有代码库中。在此示例中,DoAction() 函数会增加一些内存并调用引发异常的子函数 ExceptionFnk()

DoAction() 函数需要清理在将异常传递给更高级别以便正确处理之前创建的内存。

考虑以下代码

#include "stdafx.h"
#include <exception>
#include <string>

class CFooBase {
public:
static unsigned int _id ;
CFooBase( ) { printf( "Created CFooBase (%d)\n", ++CFooBase::_id ); }
~CFooBase( ) { printf( "Destroy CFooBase (%d)\n", CFooBase::_id-- ); }
};
unsigned int CFooBase::_id ;

class ExceptionBar: public std::exception
{
public:
const char* what() const throw() { return std::string( "ExceptionBar").c_str() ; }
int Get() { return 99; }
};

// this function just throws an exception.
void ExceptionFnk() {
throw ExceptionBar( );
}

void DoAction() {

CFooBase * b = new CFooBase();
ExceptionFnk();
delete b;

}


int _tmain(int argc, _TCHAR* argv[])
{
try {
DoAction() ;
}
catch( ExceptionBar& e ) {
printf( "Higher, Exception: %s, magic number %d\n", e.what(), e.Get() ) ;
} catch (...) {
printf( "Catch all, should not happen.\n" ) ;
}

return 0;
}

产生这个输出:

Created CFooBase (1)
Higher, Exception: ExceptionBar, Magic number 99

我尽可能不使用智能指针,因为它会使系统过于复杂。

我的问题是:

  • 如何在不使用智能指针的情况下,在将异常传递给更高级别之前清理 DoAction() 中的内存。 ?

最佳答案

void DoAction() {
CFooBase * b = new CFooBase();
try
{
ExceptionFnk();
}
catch(...)
{
delete b;
throw;
}
delete b;
}

关于C++ 在不使用智能指针的情况下清理 try catch block 中的内存。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16367072/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com