new和malloc在c ++中的区别
这个问题在这里已经有了答案:
malloc
只分配内存,它不调用可以使对象处于不确定状态的构造函数。
在C ++中,你几乎不应该使用malloc
, calloc
或free
。 如果可能,避免使用new
和new[]
,而是使用对象实例或实例向量。
至于你的第二个问题(这与第一个问题非常相关), *(myBoxArray2).printer(23)
是错误的.
选择运算符优先于解引用运算符*
。 这意味着首先你使用.
成员选择器上的指针无效,并且您试图取消引用哪个printer
返回,这也是错误的,因为它不返回任何内容。
你需要(*myBoxArray2).printer(23)
(注意星号的位置在圆括号内),这与myBoxArray2->printer(23)
完全相同。
另请注意, myBoxArray2->printer(23)
与myBoxArray2[0].printer(23)
。
不同之处在于malloc根本没有初始化分配内存。 另一方面, new
调用相应的构造函数来初始化该内存(如果该构造函数用于初始化该内存)并执行其他操作以使类可用。
还delete
调用析构函数。
经验法则是:除非你知道你在做什么,否则不要在malloc
使用C ++。