加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

仅在堆中创建C对象

发布时间:2020-12-16 10:14:52 所属栏目:百科 来源:网络整理
导读: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;} 我想只在堆中创建对象(也就是说只通过new),所以我将默认的析构函数设置为private.
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;
}

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

解决方法

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

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读