【发布时间】:2011-01-01 13:29:57
【问题描述】:
自从我从 c# 转向 c++ 以来,c++ 中的一切对我来说都很疯狂。 我只是想知道如果有人可以解释我为什么我们在 c++ 中有这种实例化: 方法一:
ClassA obj1; // this is going to stack
方法二:
ClassA *obj1 = new ClassA(); //this is going to heap
而我们在 c++ 上没有常见的 C# 方式实例化:
ClassA obj2 = new obj2();
还有一个在方法 1 中的问题,我从 ClassA 获得了一个实例,但没有 (),这正是我感到困惑的地方,为什么我们必须这样进行实例化? 我们的 ClassA 有一个构造函数,但实例化时没有括号??? 我们怎么叫它的构造函数?
p.s:我已经阅读了这些主题:
Different methods for instantiating an object in C++
【问题讨论】:
-
C# 没有两种实例化方式,因为运行时会为您管理内存。
-
在方法 1 中,obj 是对 ClassA 对象的引用。在方法 2 中,obj 是指向 ClassA 对象的指针。 c++ 中的 new 返回一个指向已分配内存的指针。你必须告诉 new 要创建什么类型的对象。这就是为什么第三个选项不起作用的部分原因。 obj2 尚未定义为对象。在代码中,它只是文本,一旦创建,将用作对对象的引用的标识符。
标签: c++ instantiation