Effective STL 09~12(构造函数,析构函数,operator)

条款9:绝不在构造和析构函数过程中调用virtual函数

  • 在构造和析构期间不要调用virtual函数,此类调用从来不下降至比起当前执行的那一成

一个简单的例子:

class base
{
public:
    base();
    ~base();
    virtual  void  getone() const = 0;
};

class a : public base
{
    a();
    ~a();
    virtual  void  getone() const;
}

base::base()
{
    getone();
}


a  name;

      当我们初始化的时候,name 对象先调用基类的构造函数,从而调用了基类的getone(),没有调用 a 类的getone();

函数,从而会导致初始数据的错误。

条款10:令operator= 返回一个 reference to *this

  •     令赋值(assignment)操作符返回 reference to * this
class wight
{
public:
	wight & operator=(const wight & abc)
	{
        ...
		return *this;
	}
};

  return *this;返回左侧对象。

条款11:在operator=中处理“自我赋值”

  • 确保当对象自我赋值时 operator = 有良好的行为。
  • 确定任何操控一个对象,其中多个对象是一个对象,其行为仍然正确

条款12:复制对象时勿忘其每个成分

在复制基类中的数据时候请如下图:

  • Copy函数应该确保复制“对象内的所有成员变量”及“所有base class” 成分
  • 不要尝试以某个Copying函数实现另一个Copying函数。应将他们放在第三个函数中,并有两个Copying函数共同调用
发布了26 篇原创文章 · 获赞 7 · 访问量 4298

猜你喜欢

转载自blog.csdn.net/weixin_42126427/article/details/104433971