#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
입니다 . 또한 ->
을 사용할 때 퍼런 스 프린터가 실행되지만 동등 물을 사용할 때는 그렇지 않습니다. *(myBoxArray2).printer(23)
차이가
'malloc()'을 사용하면 유효하지 않습니다. 클래스 인스턴스는 스택에 또는'new'를 통해 할당되어야합니다. 'malloc()을 사용하면 (자), C++기구가 불려 가지 않습니다. – EJP
'myBoxArray2'는 크기가 작은 메모리 공간에 대한 포인터 일뿐입니다. 무언가의 크기는 아닙니다. 그 공간에'myBoxArray'를 복사하더라도, 생성자가 호출되지 않습니다. 왜냐하면, 생성자가 생성되지 않기 때문입니다. – moopet