gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 04:45:27 24 4
gpt4 key购买 nike

我想知道类的对象何时分配动态内存。采用以下语句,处理名为“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”(并且不必由程序员释放)。

最佳答案

您的示例大致正确。

test* pd = new test(2);

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

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

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

test ob(2);

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

关于c++ - 类的对象何时分配动态内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49354528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com