我有一个狗类以及一个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。 两种方法都可以正常工作。
当我学习一些代码时,我在不同的地方看到了这两种实现。 是否有任何理由要使用另一个。在性能方面,它们都是一样的吗?