C++实现不可复制基类

有时候,我们可能希望某些类在设计上是不可复制的,因为复制行为可能导致不可预测的行为。例如管理了某些共享资源,复制会导致重复使用或资源泄露。此外,如果类对象包含指向动态分配内存的指针,复制可能导致资源管理问题,例如内存泄漏或二次释放。通过创建不可复制基类,可以确保派生类也不能被复制,从而避免上述问题

C++中可能导致复制操作有两个主要函数:复制构造函数和拷贝构造函数,因此在实现不可复制基类时需要避免外部对这两个函数的调用。C++11引入了右值引用和移动语义的概念。这里要说明一点,右值引用是为了直接转移资源所有权避免复制构造的过程,从而提高性能。例如对象B是用对象A来初始化的,对象B有一个new出来的数组,在明确知道之后不需要使用到对象A后,可以直接将A对象中new出来的数组的所有权转移给B,避免了B对象调用new操作符。

#pragma once

class Uncopyable {
public:
    // 默认的构造和析构函数
    Uncopyable() = default;
    ~Uncopyable() = default;

    // 删除默认的拷贝构造和赋值运算符
    Uncopyable(const Uncopyable&) = delete;
    Uncopyable& operator=(const Uncopyable&) = delete;
    
    // 删除右值引用的拷贝构造和赋值运算符
    Uncopyable(Uncopyable&&) = delete;
    Uncopyable& operator=(Uncopyable&&) = delete;
};

上面的右值引用中取消了const的使用,这是由于右值引用是为了转移资源的所有权,而const限制了对象的可修改性,因此无法使用const关键字。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值