在以下代码中使用release和move的区别

时间:2018-12-13 06:30:12

标签: c++

我有一个狗类以及一个UniquePtrHolder1和UniquePtrHolder2类,如下所示

#include <memory>
#include <string>
#include <iostream>

using std::unique_ptr;
using std::string;
using std::cout;
using std::endl;

class Dog {    
public:
    Dog(string myName) : name(myName) { cout << "Dog is created " << name.c_str()  << endl; }

private:
    string name;
};

class UniqePtrHolder1 {
public:     
    UniqePtrHolder1(unique_ptr<Dog> dog) : m_dog(std::move(dog)) {}; 
    unique_ptr<Dog> m_dog;
};

class UniqePtrHolder2 {
public:

    UniqePtrHolder2(unique_ptr<Dog> dog) : m_dog(dog.release()) {}    
    unique_ptr<Dog> m_dog;
};

int main()
{
 unique_ptr<Dog> pD1(new Dog("Gunner"));
 UniqePtrHolder1 holder1(std::move(pD1));

 unique_ptr<Dog> pD2(new Dog("Hunter"));
 UniqePtrHolder2 holder2(std::move(pD2));


}

在上面的代码中,UniqePtrHolder1类使用dog的move构造函数来初始化其Dog,而UniqePtrHolder2使用唯一指针的release方法初始化其Dog。 两种方法都可以正常工作。

当我学习一些代码时,我在不同的地方看到了这两种实现。 是否有任何理由要使用另一个。在性能方面,它们都是一样的吗?

0 个答案:

没有答案