《Effective C++》条款6:若不想使用编译器自动生成函数,就该明确拒绝

博客围绕编译器默认定义的函数展开,如copy构造函数、copy assignment、析构函数和default构造函数。当不想使用这些函数,尤其是不希望对象被拷贝时,介绍了两种方法:一是将copy构造和copy assignment声明为private且不实现;二是设计专门阻止copying动作的base类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         条款5中讲了编译器会默认为我们定义一些函数,①copy构造函数 ②copy assignment ③析构函数④default构造函数 ,那如果我们不想使用这些函数怎么办?条款5中讲到了,什么情况我们需要自己定义cpoy assignment和copy 构造函数,要是碰到一种情况,我们不希望对象有这些属性,不希望它能够被拷贝,该如何去做?

方法一:将copy构造函数和 copy assignmen 声明为private,不去实现

       这样可以成功的阻止调用这两个函数但是这种做法并不是绝对安全的,因为private可以被friend函数访问到,但是你没有去定义这两个函数,当友元函数去调用的时候,在连接的阶段会会发生连接错误

方法二:设计一个专门阻止copying动作的base类

class Uncopyable
{
protected:
   Uncopyable(){}
    ~Uncopyable(){}
private:
    Uncopyable(const Uncopyable&);
    Uncopyable& operator =(const Uncopyable &);
}

class HomeForSale:private Uncopyable
{

}

     这样一来要想调用HomeForSale 的对象的copy assingment和 copy构造函数,首先需要调用base的copy和copy assignment函数,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值