下面的代码创建在栈上的对象:堆栈/堆上的对象创建?
Object o;
当创建在堆上对象,就可以使用:
Object* o;
o = new Object();
而非:
Object* o = new Object();
当我们分裂在两行创建堆对象并在第二行调用构造函数(o = new object()
),这是否意味着在第一行(Object* o
)指针是在堆栈上创建的?因此Object o
将对象放在堆栈上,而Object* o
将指针放在堆栈上的未来对象上?
我的第二个问题涉及如果两行代码被称为类之外。我最近阅读(Global memory management in C in stack or heap?)全局变量不包含在堆栈/堆中,但实际上是另一部分内存?如果是这样的话,Object* o
会创建一个指针,该指针位于内存的另一部分,并指向堆对象?
这两个将*大概*优化,以同样的事情,我想。 – Ryan 2012-04-14 20:33:57
_pointer_始终在堆栈上创建。 – leftaroundabout 2012-04-14 20:36:41
我会第二@leftaroundabout,并走得更远:在一个块中声明的所有变量都在栈上创建的;第一个示例的整个对象以及第二个对象的指针。 – 2012-04-14 20:50:39