• boost::noncopyable 的作用


    boost::noncopyable 的作用

    boost::noncopyable 是用于针对 C++ 编译器的。具体看下面的代码:

    #include <iostream>
    using namespace std;
    
    class car{
    public:
    	car(int price) : _price(price){
    	}
    	int getPrice() const {return _price;}
    private:
    	int _price;
    }; 
    
    int main(){
    	car a(10);
    	car b(a);
    	car c(0);
    	cout << c.getPrice() << endl;
    	c = b;
    	cout << c.getPrice() << endl;
    	return 0;
    }
    

    代码运行结果为:

    0
    10

    我们在 car 类中并没有显示地声明和定义拷贝构造函数拷贝赋值操作符,但是在 main 中却调用了这两个函数。奇怪的是编译竟然通过了,由此而知编译器默认行为就是帮你添加拷贝构造函数拷贝赋值操作符,果然,通过程序最后运行的结果显示了我们的猜想。

    但是我们有时候并不需要拷贝构造函数拷贝赋值操作符呀,那该怎么办?

    方法一就是私有化拷贝构造函数拷贝赋值操作符,这样用户就无法调用类的私有成员函数了,如下所示:

    class car{
    public:
    	car(int price) : _price(price){
    	}
    	int getPrice() const {return _price;}
    private:
    	car(const car& a){
    		_price = a.getPrice();
    	}
    	car& operator=(const car& a){
    		_price = a.getPrice();
    	}
    	int _price;
    }; 
    

    这样编译就通不过了。

    当然这样写起来很麻烦,可以直接让类继承自 boost::noncopyable ,这样编译器就不会默认添加拷贝构造函数拷贝赋值操作符了!

  • 相关阅读:
    DS博客作业03--栈和队列
    DS博客作业02--线性表
    DS博客作业01--日期抽象数据类型设计与实现
    C语言博客作业06--结构体&文件
    DS博客作业08--课程总结
    DS博客作业07--查找
    DS博客作业06--图
    DS博客作业05--树
    DS博客大作业--树 (陈梓灿组)
    DS博客作业03--栈和队列
  • 原文地址:https://www.cnblogs.com/Codroc/p/13582717.html
Copyright © 2020-2023  润新知