2011-04-19 106 views
6

在Embarcadero RAD Studio中调试C++代码时发现了这个问题。它似乎在编译,但坦率地说,虽然它看起来很明显是什么意思,但我无法弄清它到底在做什么。你能解释一下这个神秘的代码吗?

TObject *objPtr (new TObject()); 

如果有人可以提供一个理智的解释,我将不胜感激。

+3

C++允许您使用类似于对象构造函数的语法初始化内置类型(例如整数或指针)。您也可以使用这种类似构造器的语法作为类型转换操作,例如, 'int foo = some_function(int(bar))'。 – 2011-04-19 01:09:02

+0

你需要阅读构造函数(ctors)。这使用特定于C++的语法来反映ctor被调用的方式,而不是您习惯使用的更类似C语法的语法。通常你不会看到指针,而是看到在堆栈上创建的类实例。不错的问题,但。 +1。 – 0xC0000022L 2011-04-19 01:34:41

+0

虽然所有的答案都是正确的,并且我想在这些问题出现之前提出一个这样的答案,但是我读到的问题是,**为什么**正在初始化TObject(而不是某个后代)?例如很明显,它正在做什么答案说,但**实际目标**是什么? – RichardTheKiwi 2011-04-19 03:12:10

回答

1

这会在堆上创建TObject类型的对象,并将其位置存储在名为objPtr的TObject指针中。它应该通过行删除objPtr在某些时候删除,以防止内存泄漏。

4

它使用直接初始化语法将objPtr初始化为新分配的Tobject。对于大多数实际用途而言,它相当于Tobject *objPtr = new Tobject();

相关问题