码迷,mamicode.com
首页 > 编程语言 > 详细

effective c++ 条款06:若不想使用编译器自动生成的函数,就该明确拒绝

时间:2018-06-09 23:14:16      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:protect   TE   ons   声明   编译器   pre   copy   方法   构造函数   

记住:
为防止编译器暗自提供的功能,可将相应的成员函数声明为privae并且不予实现。也可以使用Uncopyable这样的父类实现。

对于独一无二的对象,希望不支持拷贝构造函数和赋值操作符。

class HomeForSale {
public:
    ...
private:
    HomeForSale(const HomeForSale&);            //只是声明,阻止编译器自动生成
    HomeForSale& operator=(const HomeForSale&);
}

HomeForSale h1;
HomeForSale h2;
HomeForSale h3(h1);  // 编译失败
h1 = h2;             // 编译失败


另一种方法

class Uncopyable {
protected:                //允许子类对象构造和析构
    Uncopyable() {}
    ~Uncopyable() {}
private:
    Uncopyable(const Uncopyable&);  //阻止拷贝
    Uncopyable& operator=(const Uncopyable&);
}

class HomeForSale: private Uncopyable {
}

HomeForSale h1;
HomeForSale h2;
HomeForSale h3(h1);  // 编译失败
h1 = h2;             // 编译失败


基类中    继承方式 子类中

public      & public继承         => public
public      & protected继承   => protected
public      & private继承       = > private

protected & public继承        => protected
protected & protected继承  => protected
protected & private继承      = > private

private     & public继承        => 子类无权访问
private     & protected继承  => 子类无权访问
private     & private继承      = > 子类无权访问

 

effective c++ 条款06:若不想使用编译器自动生成的函数,就该明确拒绝

标签:protect   TE   ons   声明   编译器   pre   copy   方法   构造函数   

原文地址:https://www.cnblogs.com/pfsi/p/9161585.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!