在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
}
答案 0 :(得分:2)
您正在构建一个可以保存对象数据的内存块,但这不是对象。
一个对象可能比那片内存要多得多,而且编译器究竟要做什么。它可能只是,但它可能是很多其他的东西。