栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ 类对象只在heap中

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 类对象只在heap中

#include 


class Base{
public:
    static Base CreateObject(){
        return Base();
    }
private:
    Base(){}
};


void Test()
{
    //Base* p = new Base;
    //Base b;

    // 虽然构造函数私有,但由编译器提供的赋值构造函数可以进行类外赋值
    // 仍然无法对象只能申请在堆空间中
    Base b = Base::CreateObject();
    Base b1(b);//拷贝
}

class Base1{

public:
    void Destroy() const{
        if (this != nullptr) delete this;
    }
private:
    ~Base1(){}
};

// 虽然析构函数设置为private,但妨碍了继承和内含场景
void Test1(){
    // Base1 b;// error, 析构函数私有

    // 私有new在堆空间申请
    Base1 *p = new Base1();
    // delete p; 析构函数是私有的
    p->Destroy(); // ok
}

class Derived: public Base1{

};

class Contact{
private:
    Base1 b;
};

class Contact1{
public:
    Contact1(): p(new Base1){}
private:
    Base1* p;
};
void Test2(){
    // Derived d;// error, 父类析构函数是私有的

    // Contact c;// error ,Base1析构函数是私有的

    // 克服子类继承父类时无法创建对象,只需要将父类析构函数private改为protected
    // 克服其他类内含析构函数为私有的类对象,则只需要在内含类中将类对象改为类对象指针

    Contact1 c;// ok
}


int main()
{

    Test();

    return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1001397.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号