我知道这可能听起来像一个愚蠢的问题,但当我尝试使用语句实例化一个新对象时,为什么会出现类似于“
“?”
“我应该理解‘new’关键字是为指针保留的吗?还是其他什么?”
无法将Object*转换为Object
”的错误?
Object obj = new Object();
“?”
“我应该理解‘new’关键字是为指针保留的吗?还是其他什么?”
Object* obj = new Object();
new
总是返回指向对象的指针。
如果你只写Object obj
,那么它意味着obj
将持有对象本身。如果它在函数内以这种方式声明,则内存将在堆栈上分配,并且一旦离开该函数,就会被清除。 new
在堆上分配内存,因此指针可以从函数返回。请注意,指针也可以指向本地(堆栈)变量。
Object* ob...
和Object *ob...
的表示法有关。我承认我正在考虑这个问题...;) - FrustratedWithFormsDesignerObject* ob
这种形式,因为它看起来像一个类型。是的,我知道 Object* ob1, ob2
应该写成 Object *ob1, *ob2
。 - AndreyT* p
convention annoys me, but the more C++ I do the more I understand why it became the convention). For me, that wouldn't be sufficient reason for a downvote.” 这段话中的“pretty idiomatic for C++” 意思是在C++中语言习惯用法,而“T* p”这个表示方法可能让一些老派C程序员感到不适,但做更多的C++后可以理解为什么它成为了一种约定。对我来说,这并不足以成为downvote的理由。 - John Bode由于new
返回一个指针,你应该使用
Object *obj = new Object();
Object* obj
怎么样?;-) (注:该句是一段对话,上下文缺失。意思大概是在讨论编程语言中的变量类型声明) - fredoverflow没错。使用New会在堆上创建一个对象,并返回指向它的指针。
新的操作符可以创建一个指向对象的指针。
因此,Object *obj = new Object()
应该可以使用。
但是,只有 Object obj()
可以在堆栈空间中构造对象。
Object obj()
可以作为全局变量存在,不会在堆栈上分配。 - AndreyObject obj();
声明了一个名为 obj
的函数,该函数不带参数并返回一个 Object
。 - fredoverflow只需要使用 Object obj;
,就可以创建对象 obj
。
我本来想留下评论的,但显然我需要一定的声望才能这样做。
在Java中,用于存储对象的变量隐式地指向该对象的指针。因此,在C++和Java中,new
的工作方式是相同的,但在Java中你并不会意识到它。我猜这就是你困惑的原因。
new
必须返回一个指针了。 - Benoit