如何在函数内返回其值后删除指针

Eme*_*mer 30 c++ pointers memory-management

我有这个功能:

char* ReadBlock(fstream& stream, int size)
{
    char* memblock;
    memblock = new char[size];
    stream.read(memblock, size);
    return(memblock);
}
Run Code Online (Sandbox Code Playgroud)

每次我必须从文件中读取字节时,都会调用该函数.我认为每次使用它都会分配新的内存,但是一旦我处理了数组内的数据,我怎么能释放内存呢?我可以从功能外部做到吗?通过分配大块处理数据比分配和删除小块数据提供更好的性能?

非常感谢您的帮助!

Geo*_*che 15

使用delete[]以下命令释放动态数组:

char* block = ReadBlock(...);
// ... do stuff
delete[] block;
Run Code Online (Sandbox Code Playgroud)

理想情况下,您不在此处使用手动内存管理:

std::vector<char> ReadBlock(std::fstream& stream, int size) {
    std::vector<char> memblock(size);
    stream.read(&memblock[0], size);
    return memblock;
}
Run Code Online (Sandbox Code Playgroud)

  • @dream:它取决于,最有可能*命名的返回值优化*,[NRVO](http://en.wikipedia.org/wiki/Return_value_optimization),将会启动.另请参阅有趣的[想要速度?通过价值传递.](http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/). (4认同)
  • 使用此方法,当返回向量对象时,是否会调用其复制构造函数(我的意思是,在一个点上存在两个实例)? (2认同)

sig*_*fpe 5

完成后,只需delete[]使用此函数的返回值.你从外面删除它并不重要.只是在完成使用之前不要删除它.

  • 它必须是`delete []`,而不是`delete`. (2认同)