C++ 11 移动语义应用-移动构造函数和移动赋值

文章展示了C++类的构造函数、拷贝构造函数、移动构造函数以及移动赋值运算符的实现,包括异常处理和内存管理。在示例中,类`C`定义了不同类型的构造函数和赋值操作,用于对象的创建、复制和移动。此外,还讨论了`noexcept`关键字在异常安全编程中的应用。

参考 Primer C++(第5版) p468~

class C {
public:
    C(int v = 0) : v(v) { cout << "构造.." << endl; };

    C(C &t) : v(t.v) { cout << "拷贝构造.." << endl; }

    //noexcept 表示通知标准库此构造函数不抛出任何异常
    C(C &&t) noexcept: v(t.v) { cout << "移动构造.." << endl; }

    C &operator=(C &&t) noexcept {
        if (this != &t) {
            free();
            v = t.v;
        }
        cout << "移动赋值.. " << endl;
        return *this;
    }

    ~C() {
        free();
        cout << "析构.." << endl;
    }

    int v;

    void free() {};
};

int main() {
    C c(1);
    C b1(c);
    C b2(std::move(c));//std:: 不能省略
    b2 = std::move(b1);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值