#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;
}
問題は、単にコンストラクタがプリントアウトされていないされていることが、私の単純なderefrence myBoxArray2
へのポインタは、コンストラクタが印刷されていない場合とどちらも印刷目的球printer
です。 はまた、なぜ私は->
funnctionプリンタの実行を使用するときには、私は同等*(myBoxArray2).printer(23)
違いは
ここで 'malloc()'の使用は無効です。クラスインスタンスは、スタック上に、または 'new'を介して割り当てる必要があります。あなたが 'malloc()を使うと、C++の機械はどれも呼び出されません。 – EJP
'myBoxArray2'は、大きさのあるメモリ空間へのポインタです。無関係なもののサイズです。その空間に 'myBoxArray'をコピーしたとしても、コンストラクタを呼び出すことは決してありません。なぜなら、それを待つのは、構築されていないからです。 – moopet