C++函数返回引用和内存

use*_*513 1 c++ memory optimization

我在我的项目中有几个创建对象的函数.例如,如果你有一个函数来创建这样的对象:

int& f()
{
    int *i = new int(5);
    return *i;
}
Run Code Online (Sandbox Code Playgroud)

然后当你打电话给你时

int x = f();
Run Code Online (Sandbox Code Playgroud)

或类似的东西

std::cout << f();
Run Code Online (Sandbox Code Playgroud)

在函数中创建的int会发生什么?引用是像普通变量一样处理还是我做了一件非常错误的事情?如果是这样,制作物品的正确方法是什么?

Log*_*uff 7

事实上,这是非常错误的.您忘记参考的那一刻就是您泄漏资源的那一刻.而你正在这样做int x = f();.

与第二种情况相同,std::cout << f();- 如果您不打算delete动态分配,请不要使用它int.

intstd::basic_ostream::operator<<按值传递,复制.这实际上并不重要,没有普通代码会接受引用然后调用delete &ref;.

这是给你的链接:RAII.


我不知道你想要从你的人为的例子中得到什么,但是考虑按值返回,或者在多态的情况下使用智能指针.