new操作符——在c++中使用new关键字和不使用new关键字创建对象的区别
new operator - Difference in creating an object in C++ using new keyword and not
我是新来的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()方法销毁该实例。
相关文章:
- 声明C++数组(带或不带 "new" 关键字)
- 在 Objective-C++ -> EXC_BAD_ACCESS Error 中使用"new"关键字
- 如何在堆上初始化线程?(使用 "new" 关键字)
- 如何在不使用 "new" 关键字的情况下解除分配创建的对象的内存?
- 在 new 关键字中,由默认构造函数初始化的类中的元素是否也使用 new 关键字在C++?
- 野牛解析器无法识别"New"关键字
- 'new'关键字如何工作?我最近才知道新关键字
- 为什么当我使用"new"关键字声明数组指针时无法删除它
- 如果我不使用 new 关键字,可能会出现内存泄漏吗?
- 'new'关键字和类存储
- 说明何时在C++中使用 "new" 关键字
- 在没有“new”关键字的情况下实例化类会导致在堆栈或堆上创建其内部变量
- C++对象初始化,无需 new 关键字并使用指针
- 当对象不使用 new 关键字但父对象在堆中时,对象是否存储在堆栈或堆中
- 在没有 new 关键字的情况下初始化C++对象的内存从何而来
- 模板类的构造函数在使用 new 关键字时调用类型构造函数
- 循环中的多个对象C++而不"new"关键字
- C++:结构和new关键字
- 删除c++中的对象,以及new关键字
- New关键字用作标识符