C++配置数组

Mat*_*hid 2 c++ memory-management

我正在看另一个问题,最高评价的答案说:

其他答案已经提到了RAII,这是一个很好的答案.但是,最好的建议是:首先不要分配动态对象!别写了

Foo * x = new Foo();

什么时候你可以写

Foo x;

代替.

这对我来说似乎是个好听的建议.基于堆栈的东西已经具有良好且良好的自动生命周期管理.

我的问题是:如何将这个声音建议应用于类似的东西

char * buffer = new char[1024];
stream.read(buffer, 1024);
...do stuff...
delete[] buffer;
Run Code Online (Sandbox Code Playgroud)

如果我是愚蠢的应用,但你如何创建阵列而不使用new[]?

Mot*_*tti 5

char buffer[1024];
stream.read(buffer, 1024 /* or sizeof(buffer) */); 
Run Code Online (Sandbox Code Playgroud)

  • 是的,只要在编译时知道缓冲区大小并且没有逃避其范围,它就是移动到堆栈的候选者.然而,有一个原因,即使具有固定大小和生命周期的缓冲区也可能更好,而不是在堆栈上它们是如此之大以至于它们冒着占用所有堆栈空间的风险.1024字节相对较小,但如果缓冲区大小为10 MiB,那么您不希望它在堆栈上.在这种情况下你仍然不应该使用`new`,你应该使用像`std :: vector <char> buf(10485760);`这样的东西.@MathematicalOrchid (2认同)