zoukankan      html  css  js  c++  java
  • cpp沉思录笔记1类设计者的核查表

     

    你的类需要一个构造函数吗?

    简单的类不需要构造函数,他们的结构就是他们的接口。

    你的数据成员是私有的吗?

    你的类需要一个无参的构造函数吗?

    如果一个类已经有了构造函数,而你想声明该类的对象可以不必显式地处时候它们,则必须显式地写一个无参的构造函数。

    是不是每个构造函数初始化所有数据成员?

    构造函数的用途就是用一种明确定义的状态来设置对象。对象的状态由对象的数据成员反应。因此,每个构造函数都要负责为所有的数据成员设置经过明确定义的值。

    但是,类有时会有一些数据成员,它们只在它们的对象存在了一定时间之后才有意义。

    类需要析构函数吗?

    不是所有有构造函数的类都需要析构函数。只有在该类分配了资源,而这些资源又不会由成员函数自动释放时,才需要。

    类需要一个虚拟析构函数吗?

    虚拟析构函数是为了解决这样的一个问题:基类指针指向派生类对象,并用基类的指针删除派生类对象。即,用作基类的类的析构函数一般都是虚的。

    你的类需要复制构造函数吗?

    关键在于复制该类的对象是否就相当于复制其数据成员和基类对象。如果不相当于,就需要复制构造函数。

    如果你的类在构造函数内分配资源,则可能需要一个显式的复制构造函数来管理资源。有析构函数(非空)的类通常是用析构函数来释放构造函数分配的资源,这通常也说明需要一个复制构造函数。

    如果不想用户能够复制类的对象,就声明复制构造函数(可能还有赋值操作符)为私有的。

    你的类需要一个赋值操作符吗?

    如果需要复制构造函数,同理多半也会需要一个赋值操作符。如果不想用户能够设置类中的对象,就将赋值操作符私有化。

    类X的赋值由X::operator=来定义。通常,operator=应返回一个X&,并且由return *this结束以保证与内建的复制操作符一致。

    你的赋值操作符能正确地将对象赋给对象本身吗?

    如果原对象和目标对象时同一个,而我们又奉行”先释放旧值,再复制”的行事规程,那么就可能在还没有实施复制之前就把原对象销毁了。避免这个问题的最简单的方法就是显式地加以预防(先判断是否与this相同),或者先将旧的目标值保存起来,直到将源值复制完成。

    你的类需要定义关系操作符吗?

    删除数组时你记住了使用delete[]吗?

    记得在复制构造函数和赋值操作符的参数类型中加上const了吗?

    复制构造函数应该是像X::X(const X&)这样。

    同样,赋值操作符应为X::operator=(X&)

    如果函数有引用参数,它们应该是const引用吗?

    记得适当地声明成员函数为const的了吗?

    如果确信一个成员函数不用修改它的对象,就可以声明它为const,这样就可以把它用于const对象了。

  • 相关阅读:
    Android 11 的5个新安全和隐私功能,不更新会面临被黑客入侵风险
    SSL / TLS新加密漏洞,黑客是这样读取敏感数据,看看修复方法!
    蓝牙新漏洞,黑客可以轻松控制你的手机,全球数亿台设备受影响
    Visa信用卡漏洞,新的PIN验证黑客可绕过,并进行非接触式付款
    思科是如何遭黑客入侵?原因:XSS缺陷到RCE缺陷
    WhatsApp现神秘漏洞,黑客可远程查看聊天记录
    郭盛华:免受网络黑客攻击的5个技巧
    Apache服务器现3个致命漏洞,黑客可远程监听
    centos 下安装python3 的MySQLdb
    MySQL创建用户与授权及删除
  • 原文地址:https://www.cnblogs.com/wangzhijun/p/2916981.html
Copyright © 2011-2022 走看看