如何正确地实现移动构造函数?

如何正确地实现移动构造函数?

自己实现一个pair,名为my_pair,分别写了两个构造函数(原为复制/移动构造函数,错)。通过两个变量,调用的是move版本的构造函数,但是变量是左值,不应该是const引用版本的构造函数吗?

完整代码:Ubuntu Pastebin

两个构造函数代码如下:

template<typename K1, typename K2>
my_pair(const K1& f, const K2& s) :first(f), second(s) {
	std::cout << "my_pair(const K1&, const K2&)" << std::endl;
}

template<typename K1, typename K2>
my_pair(K1&& f, K2&& s) : first(f), second(s) {
	std::cout << "my_pair(K1&&, K2&&)" << std::endl;
}

//调用
int i=1;
string str="C++";
my_pair<int, string> mp(i,str);

//输出
my_pair(K1&&, K2&&)

修改如下:

class student
{
public:
    student(const char* name,int size)
    {
        _name = new char[size];
        strncpy_s(_name,size,name,MaxNameSize);
    }

    /*手动实现的拷贝构造函数
     *实现了按值拷贝的深拷贝
     */
    student(const student& ref)
    {
        int len = strnlen_s(ref._name, MaxNameSize);
        int maxCount = len == MaxNameSize ? len : len+1;
        _name = new char[maxCount];
        strncpy_s(_name, maxCount, ref._name, maxCount);
    }
    //赋值函数自己添加
    //这是移动构造函数
    student(student&& rref)
    {
        _name = rref._name;
        rref.name = nullptr;
    }

    //移动赋值自己添加一下
    ~student()
    {
        delete _name;
        _name = nullptr;
    }
private:
    char* _name;
    static constexpr int MaxNameSize = 64;
};

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值