c++ 移动语义

c++ 移动语义,第1张

c++ 移动语义 c++ 移动语义
  • 概念
    移动语义:转移所有权,和深拷贝的区别在于,深拷贝是对于别人的资源,自己重新分配一块内存存储复制过来的资源,而移动语义,类似于转让。对于那块资源,转为自己所拥有,别人不再拥有也不会再使用。

  • 示例

class TestA {
public:
    TestA(int size) : size_(size) {
        data_ = new int[size];
    }

    TestA() {}

    TestA(const TestA& a) {
        size_ = a.size_;
        data_ = new int[size_];
        cout << "copy " << endl;
    }

    TestA(TestA&& a) {
        this->data_ = a.data_;
        a.data_ = nullptr;
        cout << "move " << endl;
    }

    ~TestA() {
        delete[] data_;
    }

    int* data_;
    int size_;
};

int main() {   
    TestA a(10);
    TestA b = a;
    TestA c = std::move(a);
    return 0;
}

这里如果不使用std::move(), 会有很大的拷贝代价,使用移动语义可以避免很多无用的拷贝。
移动语义针对那些实现了移动构造函数的类对象,对于基本类型还是会拷贝。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5099596.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存