我知道这可能听起来像是一个愚蠢的问题,但为什么我会收到类似“
”的错误无法将Object *转换为Object
“当我尝试使用语句”
实例化一个新对象时Object obj = new Object();
“?
我是否理解“ new ”关键字是为指针保留的?还是别的什么?
答案 0 :(得分:38)
Object* obj = new Object();
new
总是返回指向对象的指针。
如果只写Object obj
,则表示obj
将保留对象本身。如果它在函数内部以这种方式声明,则内存将在堆栈上分配,并在离开该函数后将被擦除。 new
在堆上分配内存,因此可以从函数返回指针。请注意,指针也可以指向本地(堆栈)变量。
答案 1 :(得分:8)
由于new
返回一个指针,你应该使用
Object *obj = new Object();
答案 2 :(得分:6)
完全。 New在堆上创建一个对象,返回一个指向它的指针。
答案 3 :(得分:6)
new运算符生成指向对象的指针
Object *obj = new Object()
应该有效。
但只是Object obj()构造对象就好但在堆栈空间
答案 4 :(得分:6)
对象obj;
就是你所需要的。它创建了对象obj。
答案 5 :(得分:1)
我会简单地留下评论,但显然我需要某个代表才能这样做。
在Java中,用于存储对象的变量是隐式指向Object的指针。所以new
在C ++中的工作方式与Java相同,但是你没有在Java中意识到它。我猜这就是你混淆的原因。