仅在堆中创建C++对象

Gor*_*don 3 c++ heap stack class

class A
{
public:
    A() { printf("constructor"); };
private:
    ~A() {};

};
int main(int argc, char** argv[])
{
    void *p = new A(); //ok
    void *p = new A[5]; //error
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想只在堆中创建对象(也就是说只通过new),所以我将默认的析构函数设置为private.但是,它在我new A()用来创建一个对象时起作用,当我使用时它不起作用new A[5].为什么?我很迷惑.非常感谢!

R S*_*ahu 8

执行涉及的步骤new A[5]是:

  1. 分配所需的内存量.
  2. 使用默认构造函数初始化每个对象.
  3. 返回指向已分配内存的指针.

如果在上面的第二步中抛出异常,则需要实现:

  1. 在已初始化的所有对象上调用析构函数.
  2. 释放内存.
  3. 处理例外情况.

因此,new []实现需要能够访问类的析构函数.