📅  最后修改于: 2023-12-03 14:48:11.067000             🧑  作者: Mango
在C++11中,unique_ptr是一个聪明的指针类,它允许使用动态分配的对象而不必担心内存泄漏。
定义一个unique_ptr变量:
std::unique_ptr<int> ptr(new int);
在以上例子中,定义了一个unique_ptr对象指向一个int类型对象,并将它初始化为new int返回的指针。必须使用new来分配空间,并将指针传递给unique_ptr构造函数。
可以使用reset()来释放unique_ptr:
std::unique_ptr<int> ptr(new int);
ptr.reset(); // ptr释放指向的int对象内存
也可以在unique_ptr生命周期的任何时候将指针赋值给它:
std::unique_ptr<int> ptr1(new int);
std::unique_ptr<int> ptr2;
ptr2 = std::move(ptr1); // ptr2现在拥有ptr1之前持有的int对象内存
在以上例子中,我们使用std::move()将ptr1的所有权转移到ptr2中。
unique_ptr也可以在继承关系树中被使用。在继承关系树中定义unique_ptr对象时需要注意以下几点:
以下是一个派生类中使用unique_ptr的例子:
class Base {
public:
virtual ~Base() {}
};
class Derived : public Base {
private:
std::unique_ptr<int> ptr;
public:
Derived() : ptr(new int) {}
Derived(Derived& other) : ptr(new int(*other.ptr)) {}
~Derived() override {}
};
在以上例子中,派生类Derived包含了一个unique_ptr,指向一个int类型的对象。注意,Derived类提供了一个拷贝构造函数来复制基类unique_ptr所拥有的int对象指针。Derived也需要自己定义析构函数来释放它所拥有的int对象的内存。
unique_ptr是C++11中引入的一个聪明的指针类,它允许使用动态分配的对象而不必担心内存泄漏。unique_ptr也可以在继承关系树中使用,但是需要继承派生类定义构造函数和析构函数,以确保对象安全释放。