贡献者: addis; admin
unique_ptr<类> p(类指针)
,其中 类指针 = new 类
指向一个需要 delete
的对象。
unique_ptr<类,删除函数类> p(类指针, 删除函数)
。删除函数
是 删除函数类
的一个对象(例如 C 函数指针)。
删除函数类
和 删除函数
可以省略,省略后默认用 delete 类指针
。
删除函数
需要可以像 void 函数名(类* p)
一样使用。它几乎可以是任何 callable(例如具有 operator()
的对象)
unique_ptr
的 destructor 会调用 删除函数(类指针)
释放内存。
*, ->, []
,也可以对 unique_ptr
使用。
p2 = move(p1)
可以转移。
p.get()
返回 类指针
。p.get_deleter()
返回 删除函数
的 ref。
if(p)
可以判断是否在管理一个对象。
p.reset(新指针)
调用原来对象的删除函数,并管理新的对象。
p2 = p1
复制,只有所有指向同一对象的 shared_ptr
的 destructor 都被调用,才会调用删除函数。
p.use_count()
返回有几个 shared_ptr
正在使用。
shared_ptr
,或者 weak_ptr
初始化
p.lock()
创建出管理对象的一个新的 shared_ptr
p.expired()
可以检查对象是否已经被删除。
#include <iostream>
#include <memory>
class Node {
public:
std::shared_ptr<Node> next;
std::weak_ptr<Node> prev; // weak_ptr to avoid circular reference
~Node() {
std::cout << "Node destroyed" << std::endl;
}
};
int main() {
std::shared_ptr<Node> node1 = std::make_shared<Node>();
std::shared_ptr<Node> node2 = std::make_shared<Node>();
node1->next = node2;
// This would create a circular reference if prev were a shared_ptr
node2->prev = node1;
std::cout << "node1 use count: " << node1.use_count() << std::endl; // 1
std::cout << "node2 use count: " << node2.use_count() << std::endl; // 2
return 0;
}