当前位置: 首页 > news >正文

深圳企业黄页网站网站建站加盟

深圳企业黄页网站,网站建站加盟,下载建程网,软件开发app制作公司C中禁止在栈中实例化的类 栈空间通常有限。如果您要编写一个数据库类,其内部结构包含数 TB 数据,可能应该禁止在栈上实例化它,而只允许在自由存储区中创建其实例。为此,关键在于将析构函数声明为私有的: class Monst…

C++中禁止在栈中实例化的类

栈空间通常有限。如果您要编写一个数据库类,其内部结构包含数 TB 数据,可能应该禁止在栈上实例化它,而只允许在自由存储区中创建其实例。为此,关键在于将析构函数声明为私有的:

class MonsterDB
{
private:~MonsterDB(); // private destructor//... members that consume a huge amount of data
};

通过声明私有的析构函数,可禁止像下面这样创建实例:

int main()
{MonsterDB myDatabase; // compile error// … more codereturn 0;
}

上述代码试图在栈上创建实例。退栈时,将弹出栈中的所有对象,因此编译器需要在 main() 末尾调用析构函数 ~MonsterDB(),但这个析构函数是私有的,即不可用,因此上述语句将导致编译错误。
将析构函数声明为私有的并不能禁止在堆中实例化:

int main()
{MonsterDB* myDatabase = new MonsterDB(); // no error// … more codereturn 0;
}

上述代码将导致内存泄露。由于在 main 中不能调用析构函数,因此也不能调用 delete。为了解决这种问题,需要在 MonsterDB 类中提供一个销毁实例的静态公有函数(作为类成员,它能够调用析构函数),如以下示例程序所示:

#include <iostream>
using namespace std;class MonsterDB 
{
private:~MonsterDB() {}; // private destructor prevents instances on stackpublic:static void DestroyInstance(MonsterDB* pInstance){delete pInstance; // member can invoke private destructor}void DoSomething() {} // sample member method
};int main()
{MonsterDB* myDB = new MonsterDB(); // on heapmyDB->DoSomething();// uncomment next line to see compile failure // delete myDB; // private destructor cannot be invoked// use static member to release memoryMonsterDB::DestroyInstance(myDB);return 0;
}

这些代码旨在演示如何创建禁止在栈中实例化的类。为此,关键是将构造函数声明成私有的,如第 6 行所示。为分配内存,第 9~12 行的静态函数 DestroyInstance() 必不可少,因为在 main() 中不能对 myDB 调用 delete。为了验证这一点,您可取消对第 23 行的注释。

数据库类把析构函数设置为私有,只能使用new在自由储存区中创建其对象。如下代码:

class MonsterDB
{
private:~MonsterDB( ) {};
public:static void DestroyInstance(MonsterDB* pInstance){delete pInstance;}//……imagine a few other methods
};int main()
{MonsterDB* pMyDatabase = new MonsterDB();MonsterDB :: DestroyInstance(pMyDatabase);return 0;
}

该文章会更新,欢迎大家批评指正。

推荐一个零声学院的C++服务器开发课程,个人觉得老师讲得不错,
分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容
点击立即学习:C/C++后台高级服务器课程

http://www.yayakq.cn/news/994067/

相关文章:

  • 苏州营销型网站建设推广四川建设厅官方网站文件下载
  • 黄冈网站建设的方案山东建大建设有限公司网站
  • 哪个网站做阿里首页模板网站推广过程叙述
  • 哪种企业适合做网站建网站哪便宜
  • 如何编写网站开发文档淘宝网站怎么做的
  • 网站建设济南网站建设前准备
  • 维度网络做网站设计公司网站建设
  • 典当行网站策划手机论坛网站源码
  • asp网站怎么做三语惠州热门的网站
  • 深圳专业网站建设网站制作8年专注申请个人企业邮箱
  • 可以做初中地理题的网站网站建设维护php
  • 培训行业网站建设手机上怎么做网站创业
  • 换空间对网站排名的影响吗他达拉非什么是
  • 蓝色管理系统网站模版一个网站需要怎么做
  • 邯郸 网站建设手机开发人员选项在哪
  • 网站js幻灯片代码做暧暧视频网站免费
  • 织梦如何做响应式手机网站做网站id
  • 怎么制作wap网站用ssh做的网站
  • asp.net网站开发视频有多少人自己做电影网站
  • 网站引流怎么做成都app制作开发公司
  • 找网络公司建网站的流程网站建设 长摊 无形资产
  • 自建社区网站邮箱域名怎么填写
  • 上海新建设建筑设计有限公司网站东莞做网站平台
  • 个人备案网站做商业网站域名和备案公司可以不一样么
  • 做包装一般看什么网站广州网站建设公司哪个好
  • 网站开发语言有什么要求网站优点缺点
  • 自考都到哪个网站找题做洛阳网站建设报价
  • 临沂阿里巴巴网站建设云阳营销型网站建设
  • 免费的站外推广网站维护需要用到哪些知识
  • apache建设多个网站wordpress 插件 弹窗