在C++中,創建一個對象而不調用像這樣的構造函數。這是否按照定義的行爲計算? (忽略不確定的堆內存)沒有構造函數調用的C++對象創建
class Foo {
public:
int *ptr;
int a, b;
Foo() { ptr = new int{}; }
~Foo() { delete ptr; }
void set(int a_, int b_) {a = a_; b = b_;}
void print() { std::cout << *ptr << a << b; }
};
int main() {
char *array[sizeof(Foo)]; // note the pointer
*((int**)array) = new int{3};
((Foo*)array)->set(1, 2);
((Foo*)array)->print(); // 312
}
不,這是完全和完全未定義的行爲,由於太多不同的原因列出。 –
您並未創建對象,只是將現有的內存位置投射到對象。 – Robert
標準C++語法有什麼問題? –