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

时间:2018-03-19 01:21:08

标签: c++ class pointers object dynamic-memory-allocation

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

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”(并且不必由程序员解除分配。)

1 个答案:

答案 0 :(得分:1)

你的例子大致正确。

  

test * pd = new test(2);

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

在某些短期程序中,您可以在不删除对象的情况下逃脱,因为当您的进程在现代机器中退出时,应释放进程分配的内存。但那真的很不优雅,不应该成为你的习惯。

test*pd = new test(2);视为在* pd指针中存储测试对象也很重要。指针只指向它,你可以让指针稍后指向其他东西。该指针与新的测试对象无关,除了它现在正好指向它。

  

测试ob(2);

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