C++技术问询:类对象何时分配动态内存?
C++类对象的内存分配时机解析
你猜的完全没错!咱们把这两行代码的内存分配情况拆解清楚:
1. 动态内存分配(自由存储区/堆)
- 当执行
test* pd = new test(2);时,这个test对象确实是在**动态内存(自由存储区,常被称为堆)**中创建的。 - 这种方式创建的对象,系统不会自动回收它的内存,必须由程序员手动调用
delete pd;来释放,否则会导致内存泄漏问题。
2. 栈内存分配
- 而
test ob(2);这种直接声明对象的写法,对象是在栈内存上创建的。 - 栈内存的管理完全由系统负责:当这个对象所在的作用域(比如某个函数、代码块)执行完毕后,系统会自动调用对象的析构函数,并释放它占用的栈内存,不需要你手动处理内存释放的问题。
简单总结一下:判断对象是不是用动态内存,核心看有没有用到new(或new[])关键字——只要用了,就是动态分配,需要手动释放;普通的局部对象声明,基本都是栈上分配的。
内容的提问来源于stack exchange,提问作者Inertial Ignorance
相关产品推荐
相关产品推荐

