5

简介:我有一个函数在做一些工作并返回一个布尔值。如果发生错误,布尔值应该为假。所以如果我想检查错误,我可以使用布尔值。但是,如果我完全确定(我知道,你永远无法完全确定,但也许你明白我的意思)这部分不会有错误,或者你只是不在乎是否有错误,因为它没有影响。

问题:如果我没有“捕获”返回的布尔值,是否会发生一些内存泄漏或其他性能问题?

最低代码示例:

bool my_func(/*some variables*/)
{
    if(/*error-condition*/)
    {
        //do something
        return false;
    }
    else if(/*other error-condition*/)
    {
        //do something
        return false;
    }
    return true;
}


int main(void)
{
    my_func(/*variables*/);
    return 0;
}

注释:不会返回任何编译或运行时错误或未处理的异常

4

6 回答 6

16

如果函数的返回值不是指向从函数内分配且未在该函数内释放的内存的指针,则可以放心地忽略该函数的返回值。

于 2013-09-23T13:55:24.787 回答
6

函数返回值总是可以被忽略,除非它们告诉你函数已经消耗和未释放的资源信息;例如

1) 一个指针或一个结构,其中包含指向函数分配的内存的指针

2) 包含指向函数打开的文件/流缓冲区的指针或结构

在选择忽略返回值之前,您应该始终检查函数文档。

于 2013-09-23T13:59:52.607 回答
6

在 C++ 中,内存只能为具有动态存储持续时间的对象泄漏,即使用newor std::malloc(cmp. C++11 3.7.4/1)分配的对象

您的bool函数中的 将是临时的,或者换句话说,它具有自动存储持续时间(cmp.C++11 3.7.3/1),所以忽略它是完全可以的。

于 2013-09-23T13:58:36.143 回答
2

不,不会有性能损失或内存泄漏。但是,通常异常是处理 C++ 错误的正确方法。

于 2013-09-23T13:57:15.907 回答
2

不,这是一个 void 语句,bool 被丢弃

于 2013-09-23T13:57:31.583 回答
1

您可以随意忽略它,因为返回值不会被使用。这只是一个无效的声明,这与编写2;identifiername;在您的代码中完全一样。

它会被调用,但是由于您没有存储该值,因此不会发生其他任何事情。

于 2013-09-23T13:57:26.203 回答