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

电子商务网站规划的原则/网站关键词挖掘

电子商务网站规划的原则,网站关键词挖掘,合肥品牌seo,网站模板 pc 移动版如何禁止C默认成员函数 发表于 2016-03-02 | 分类于 C | 阅读次数 17前言 前几天在一次笔试过程中被问到C如何设计禁止调用默认构造函数,当时简单的想法是直接将默认构造函数声明为private即可,这样的话对象的确不能直接调用。之后查阅了《Effec…

如何禁止C++默认成员函数

前言

前几天在一次笔试过程中被问到C++如何设计禁止调用默认构造函数,当时简单的想法是直接将默认构造函数声明为private即可,这样的话对象的确不能直接调用。之后查阅了《Effective C++》之后得到了比较详尽的解释。

了解C++的默认行为

当我们创建空类时,C++默认给我们生成了四种成员函数:

  1. 构造函数
  2. 析构函数
  3. 拷贝构造函数(copy)
  4. 重载=的拷贝函数(copy assignment)

因此,当你写下如下的代码:

1
class Empty{};

那么编译器会自动生成:

class Empty{
public:Empty(){...}                              //default构造函数Empty(const Empty& rhs){...}              //copy构造函数 ~Empty(){...} //析构函数 Empty& operator=(const Empty& rhs){...} //copy assignment操作符 }; 

至于copy构造函数和copy assignment操作符是不是有效取决于类的成员变量,例如:如果类成员有const变量或者引用,那么是不能重新赋值的。

拒绝使用编译器自动生成函数

书中提到了一个实际的应用场景。在房子销售时,每一套房子都是独一无二的(地理位置,装修等等),那么显然我们不想让别人使用拷贝构造函数或者copy assignment操作符。但是如果我们不写,那么编译器会自动生成。如果我们写了就会可能让别人利用。那么该怎么办呢?

  • 首先我们最自然的想法就是把这两个函数声明为私有,这样别人调用的时候可能会报错。我们的直觉是正确的。确实这样做可以行得通。于是我们如此写到:
class HomeForSale{
public:...
private:HomeForSale(const HomeForSale& hfs){...}HomeForSale& operator=(const HomeForSale& hfs){...} }; 
  • 当然那么做并不是万事大吉了。因为member函数和友元函数仍然能调用私有成员函数。那么你可能又想到答案:我们无需定义成员函数,只需声明即可:
class HomeForSale{
public:...
private:HomeForSale(const HomeForSale&);HomeForSale& operator=(const HomeForSale&); }; 

那么member成员函数和友元函数调用时,在编译阶段没问题,在链接阶段会报错。那么还有没有更好的方案能够让代码在编译阶段就能检测出错误呢? 答案是肯定的。

  • 我们为此建立一个基类:
class Uncopyable{
protected:Uncopyable(){}                            //允许derived对象的构造和解析~Uncopyable(){}
private:Uncopyable(const Uncopyable&); //但阻止copying Uncopyable& operator=(const Uncopyable&); }; 

那么,为了阻止HomeForSale被拷贝,我们只需继承Uncopyable:

class HomeForSale:private Uncopyable{...
};
  • C++11提出更为简洁的解决方案:
class HomeForSale{
public:HomeForSale(const HomeForSale&) = delete;HomeForSale& operator=(const HomeForSale&) = delete; }; 

总结

  • 为驳回编译器自动生成的成员函数,可将相应成员函数声明为private并且不予实现。或者使用像Uncopyable这样的基类。或者使用C++11的新特性。

  • 在boost也有这样的基类:noncopyable。

  •  

http://www.lbrq.cn/news/1306297.html

相关文章:

  • 阿里网站建设/竞价账户托管公司哪家好
  • 公司网站域名cn和com/百度工具seo
  • wordpress无法开启多站点/公司做网站推广
  • 电子商务的网站怎么做/关于友谊的连接
  • 织梦dedecms医院类网站在线预约挂号插件_utf8/全网推广费用
  • 网站创作思路/网站搜索排名优化价格
  • 做淘宝网站报告/sem是什么
  • 如何使用万网主机建设网站/济南全网推广
  • 网站设计中下拉列表怎么做/桂林网站设计制作
  • 深圳网站建设开发/收录优美图片app
  • 网站开发的职责/贵港seo
  • 公司网站的seo怎么做/百度官网首页
  • 美国地接公司怎么在中国网站做推广/天津seo霸屏
  • 肃宁县网站建设/湖南seo优化公司
  • 南昌seo站外优化/免费的行情网站app软件
  • 农业网站模板/竞价托管信息
  • wordpress扩展主题核心文件/河北seo基础
  • 做公司网站都需要什么/舆情网站直接打开怎么弄
  • 淘宝网站制作培训/山东百度推广代理商
  • 手机上制作网站的软件/今天的新闻联播
  • 在线设计免费/杭州网站运营十年乐云seo
  • 小组做数据库网站/班级优化大师怎么用
  • 做网站一般用什么程序/站长工具在线免费
  • 网站建设服务商排行/网络广告推广服务
  • 厦门做网站公司/外贸google推广
  • 广州洲聚网站开发/网站建设推广专家服务
  • 共享经济型网站开发/seo类目链接优化
  • 焦作做网站的/免费外链代发平台
  • 湖州网络公司网站建设/seo资源网站 排名
  • 精美合同网站建设/优化大师apk
  • 【现有资料整理】灵枢 - 用于医学领域的 SOTA 多模态大语言模型
  • 学习日志12 python
  • 计算机网络概述
  • 第六章 OBProxy 路由与使用运维
  • C# 8.0 创建一个简单的控制台应用程序
  • 壹脉销客AI电子名片源码核心架构