new操作符——在c++中使用new关键字和不使用new关键字创建对象的区别

new operator - Difference in creating an object in C++ using new keyword and not

本文关键字:new 关键字 创建对象 区别 操作符 c++      更新时间:2023-10-16

我是新来的C++,我只是想知道这些语句之间的区别:

注意:敌人是忍者类的基类

Ninja n;
Enemy * enemy = &n;

Enemy * enemy = new Ninja;

我还想知道什么时候应该使用这些语句,以防它们有差异。

当你这样做的时候:

Ninja n;

你在栈上分配了Ninja这个

Enemy * enemy = &n;

获取指向该位置的指针。一旦你离开当前函数,堆栈中的内存将被重用,你的Ninja*将在悬空:如果你试图访问它(解引用),你的程序将崩溃或更糟。

当你这样做的时候:

Enemy * enemy = new Ninja;

在堆上分配一个新的Ninja对象。您可以继续使用Ninja实例,直到使用

释放内存为止。
delete enemy;

查看此问题的答案,以更好地了解堆栈与堆分配。

Ninja n; ----> n在堆栈中。你不需要手动销毁它。

new Ninja; ----> n在堆中。当你不需要它时,你应该用delete enemy;删除它

注意:使用父类的指针删除子类的对象时。你最好在这两个类中都定义一个虚析构函数

new()将在内存中动态创建一个实例(如C中的malloc ())第一个声明为实例静态分配内存(如果声明在函数内部,则在堆栈中分配内存)。

如果使用new()方法,则必须在不再需要实例时通过delete()方法销毁该实例。