我不明白这种情况下内存中发生了什么:
int main(int argc, char** argv) {
Ninja n; //create a object on the stack?
Ninja * n = new Ninja; //create a pointer the the object on the heap?
return 0;
}
有什么区别?
答案 0 :(得分:0)
第一个,
Ninja n1;
在堆栈上创建。在范围的末尾(在这种情况下是主函数),对象超出范围,并且为此Ninja分配的内存被清除。
第二个,
Ninja * n2 = new Ninja;
在堆上创建。该内存未被清除为作用域的结尾,该对象在函数完成后仍然存在。