首页 > 解决方案 > 使用函数分配内存时会发生什么?

问题描述

当您通过函数返回新分配的变量时,是否会制作并传递副本并自动删除原始变量?

我假设没有内存泄漏

#include <iostream>

using namespace std;

int* allocater()
{

    int* x = new int(1);
    return x; 

    // what happens to the memory allocated to x ?
}


int main()
{


int* a = allocater();
int* b = allocater();


cout<<*a<<"  "<<*b;

delete a;
delete b;

// all memory allocated has been deleted?

}

输出符合预期。

标签: c++c++11

解决方案


当你返回一个新分配的变量时

具有动态存储的对象不是变量。

函数中有一个变量。它被命名为x。变量的类型x是,int*即它是一个指向整数的指针。

是否复制并通过并自动删除原件?

x是一个自动变量,因此当它超出范围时会自动销毁。该变量确实作为返回值复制到调用表达式中——尽管,如果编译器执行命名返回值优化,则编译器可以忽略该副本。如果类型很大,或者复制速度很慢(指针不是),这很有用。

具有动态存储的对象(其类型int在您的程序中)不会自动销毁。必须使用delete表达式释放它们。


推荐阅读