C++中的静态分配和动态分配
为什么不是
LaoJiaHelper mydal=new LaoJiaHelper ();
而是LaoJiaHelper mydal?
这个都没有new ,对象为什么能用?
在 C++ 中,有两种创建对象的方式:静态分配和动态分配。
-
静态分配:
当你使用类似LaoJiaHelper mydal;
这样的语法创建对象时,实际上是在栈上分配了一个LaoJiaHelper
类型的对象。在程序执行过程中,当进入作用域(比如main
函数),分配给对象mydal
的内存将被自动回收。这意味着当mydal
的作用域结束时(比如main
函数结束),它会自动被销毁,释放其占用的内存。 -
动态分配:
如果你使用new
运算符来创建对象,例如LaoJiaHelper *mydal = new LaoJiaHelper();
,则会在堆上分配一个LaoJiaHelper
类型的对象,并返回其地址。堆上分配的对象不会在作用域结束时自动销毁,因此你需要手动调用delete
来释放内存,以免造成内存泄漏。
在你的代码中,使用 LaoJiaHelper mydal;
的方式是静态分配对象。这种方式适用于大多数情况,特别是当对象的生命周期在函数或作用域内,并且对象不需要在堆上动态分配。当 main
函数结束时,mydal
对象会自动被销毁,不需要手动释放内存。
需要注意的是,C++11 引入了智能指针(std::shared_ptr
和 std::unique_ptr
),它们可以帮助在动态分配对象时更好地管理内存,避免手动调用 delete
,减少内存泄漏的风险。但在你的代码中,并没有使用动态分配,因此无需担心内存管理问题。