函数能否在返回语句后继续
Can a function continue after a return statement?
考虑以下C++函数:
SDL_Surface* loadBMP(std::string path, SDL_Surface* loadedBMP){
//Load bitmap
SDL_Surface* loadedBMP = SDL_LoadBMP(path);
if (loadedBMP == NULL){
printf("Unable to load image %s! SDL Error: %sn", path.c_str(), SDL_GetError());
}
return loadedBMP;
//Magic
SDL_FreeSurface(loadedBMP);
}
现在,为了这个问题,假设loadedBMP
是先前声明的全局变量。
这是我的问题:
有没有办法让函数在return
语句之后继续运行?就这个函数而言,有没有办法让最后一行SDL_FreeSurface(loadedBMP)
在return
和loadedBMP
之后运行?
否。但是是的。在返回语句之后,将不会执行函数的任何行。然而,return语句也标志着函数的结束,因此也标志着作用域的结束。因此,如果你设法在堆栈上有一个对象(比如局部变量),它的析构函数就会被调用。
但这不是你想要的。您不想释放您返回的内容,即使在返回语句之后也是如此。
否,因为在程序集级别,返回指令将控制权交还给调用方,因此它本身就退出了作用域。
除此之外,释放要返回的SDL_Surface
会给您留下一个无法使用的悬空表面,所以我看不出这样做的目的。
您所想的:在return语句之后运行代码。
可能想要的:通过确保始终释放资源来防止内存泄漏。
为此,请使用std::unique_ptr。粗略(伪代码):
std::unique_ptr<SDL_Surface,SDL_FreeSurface> loadBMP(std::string path){
//Load bitmap
std::unique_ptr<SDL_Surface,SDL_FreeSurface> loadedBMP{SDL_LoadBMP(path)};
if (!loadedBMP){
printf("Unable to load image %s! SDL Error: %sn", path.c_str(), SDL_GetError());
}
return loadedBMP;
}
它在返回后执行下一个语句,因为我在使用C语言的postgres中遇到过类似的情况,我发送了一个数据集,然后我想在返回集后删除所有记录。它对我来说很好。
为了澄清,请打印报表。
否。原因是在返回值后,您的数据类型然后下一个语句不起作用。编译器忽略它。
相关文章:
- 循环后如何继续阅读
- 我的简单if-else语句是如何无法访问的代码
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 为什么是0;C++中的有效语句
- Insert函数不适用于2 if语句C++
- 我正在尝试使用 c++ 创建一个货币转换程序,我不知道如何继续
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- while 循环 C++ 结束,但不继续到其余语句
- c++:if 语句无法正常运行,并继续执行无效输出
- 控制台将继续关闭,而不是读取 if 语句中的字符串
- 在C 中使用继续语句的打印字符
- C++ 从"else"语句继续
- 如何在 C++ 中继续该函数而不退出 after else 语句
- return 语句是否阻止递归堆栈继续
- 函数能否在返回语句后继续
- 切换语句继续
- C++if-else语句继续执行if,而不是else下的代码