Omn*_*ous 17 c++ scope memory-management software-design c++11
将其与其他语言区分开来的C++特性之一是能够将复杂对象分配为成员变量或局部变量,而不是总是必须分配它们new
.但这导致了在任何给定情况下可以选择哪个问题.
是否有一些很好的标准来选择如何分配变量?我什么时候应该将成员变量声明为直接变量而不是作为引用或指针?什么时候应该分配一个变量new
而不是使用在堆栈上分配的局部变量?
Fre*_*Foo 22
C++功能之一,使其与其他语言区别开来
...是你必须手动进行内存分配.但是让我们把它放在一边:
请注意,在第二个规则中,"大对象"我的意思是
char buffer[1024 * 1024]; // 1MB buffer
Run Code Online (Sandbox Code Playgroud)
但不是
std::vector<char> buffer(1024 * 1024);
Run Code Online (Sandbox Code Playgroud)
因为第二个实际上是一个非常小的对象,它包含一个指向堆分配缓冲区的指针.
至于指针与值成员:
当然,在适当的时候建议使用智能指针.请注意,您可以在堆分配的情况下使用引用,因为您可以随时使用delete &ref
,但我不建议这样做.引用是伪装的指针,只有一个差异(引用不能为空),但它们也表示不同的意图.