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++構文に何が問題なのですか? –