没有构造函数调用的C ++对象创建

时间:2016-10-30 16:22:05

标签: c++ undefined-behavior

在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
}

1 个答案:

答案 0 :(得分:2)

您正在构建一个可以保存对象数据的内存块,但这不是对象。

一个对象可能比那片内存要多得多,而且编译器究竟要做什么。它可能只是,但它可能是很多其他的东西。