c++ - 类 的对象何时分配动态内存?

c++ - When do objects of classes allocated dynamic memory?

我想知道 classes 的对象何时分配动态内存。采用以下语句,处理名为 "test" 的 class:

test* pd = new test(2); // Creating a test object on the free store, and storing it in a pointer.

test ob(2); // Creating a test object, in stack memory (?)

我怀疑只有第一行在动态内存中创建了一个对象(因此最终必须由程序员释放),而第二行由于缺少关键字 "new"(并且不必由程序员释放)。

你的例子大致正确。

test* pd = new test(2);

new 关键字将使编译器在堆上为新的测试对象分配内存。相当于在C语言中调用malloc(size)。在没有隐式垃圾收集器的语言(如 C 和 C++)中,您将负责稍后删除该对象。

在某些 short-run 程序中,您可以不删除对象而侥幸逃脱,因为当您的进程在现代机器中退出时,进程分配的内存应该被释放。但这真的很不优雅,不应该成为你的习惯。

同样重要的是不要将 test*pd = new test(2); 视为在 *pd 指针中存储测试对象。指针只是指向它,以后你可以让指针指向其他东西。该指针与新测试对象无关,只是现在恰好指向它。

test ob(2);

在这里,因为您没有使用 new 关键字或以其他方式在堆上分配内存,编译器负责为对象分配内存——并在对象超出范围时删除或忘记它.堆栈是一种普通的方法,但我相信该方法在技术上是 compiler-dependent 并且在某些情况下,特定的编译器可能会将变量存储在其他地方。