【发布时间】:2018-03-19 01:21:08
【问题描述】:
我想知道类的对象何时分配动态内存。采取以下语句,处理一个名为“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”而只在堆栈内存中创建一个对象(并且不必由程序员释放)。
【问题讨论】:
-
你的理解是正确的。 (尽管有些人可能会争辩说该标准根本没有提到“堆栈”这个词。)
-
在您的示例中,第二个可能分配在堆栈或静态内存中。通常,如果 this 在函数内部,则在堆栈上分配,否则在全局范围内,在静态内存中。
-
您也可以使用
malloc、calloc和realloc动态分配内存。 C++还有一堆封装operator new和operator new[]的类,比如std::unique_ptr和std::shared_ptr,几乎不需要直接使用:new,new[],malloc,calloc或现代 C++ 中的realloc。 -
在第一行中,对象没有存储在指针中。对象存储在免费存储中。指针保存对象在空闲存储区的地址。
-
可能重复?至少,绝对值得一读。 stackoverflow.com/questions/10157122/…
标签: c++ class pointers object dynamic-memory-allocation