【发布时间】:2017-09-02 12:19:25
【问题描述】:
#include <iostream>
#include <cstdlib>
using namespace std;
class Box {
public:
Box() {
cout << "Constructor called!" <<endl;
}
void printer(int x)
{
cout<<x<<" printer"<<endl;
}
~Box() {
cout << "Destructor called!" <<endl;
}
};
int main( ) {
Box* myBoxArray = new Box[4];
Box* myBoxArray2 = (Box*)malloc(sizeof(Box[4]));
myBoxArray2->printer(23);
*myBoxArray2;
*(myBoxArray2).printer(23);
return 0;
}
问题很简单,当我使用“new”时,构造函数被打印出来,但是当我简单地取消引用指向myBoxArray2 的指针时,构造函数没有被打印出来,printer 的函数也没有被打印出来。
还有为什么当我使用-> 时功能打印机运行,但当我使用等效的*(myBoxArray2).printer(23) 时却没有运行
【问题讨论】:
-
您对
malloc()的使用在这里无效。类实例必须在堆栈上或通过new分配。当您使用malloc()时,不会调用任何 C++ 机器。 -
myBoxArray2只是一个指向一些内存空间的指针,它的大小是——好吧,是无关紧要的东西的大小。即使您将myBoxArray复制到该空间中,它也永远不会调用构造函数,因为 - 等待它 - 它没有被构造。
标签: c++ malloc dynamic-allocation