std::unique_ptr<int> uptr(new int(10)); // 2.C++ 14 使用 std::make_unique std::unique_ptr<int> uptr = std::make_unique<int>(10); std::unique_ptr<MyClass> uptr = std::make_unique<MyClass>(); // 3.转移所有权 int* raw_ptr = new int(10); std::unique_ptr<int> uptr(r...
unique_ptr 独占所指向的对象,与shared_ptr不同的是,某个时刻只能有一个unique_ptr指向一个给定对象。当unique_ptr被销毁时,它所指向的对象也被销毁。 禁止复制语义存在特例,比如,可以通过函数得到一个std::unique_ptr对象,然后返回给up即可: std::unique_ptr<int>clone(intval) { std::unique_ptr<int>p(ne...
std::shared_ptr<int> sp(newint[10], [](int*p) {delete[] p; }); 实际上,除非需要共享目标,否则unique_ptr更适合使用数组: std::unique_ptr<int[]> up(newint[10]);//this will correctly call delete[] ps,上面代码可以正确的分配空间,但是空间内的值都没有初始化。如果需要默认初始化为0,可以...
std::unique_ptr<int>clone(intval){std::unique_ptr<int>p(newint(val));returnp; }intmain(){intnum =5; std::unique_ptr<int> up =clone(num);return0; } std::unique_ptr与std::move不解之缘 std::unique_ptr无法被复制,但可以使用移动构造将std::unique_ptr对象持有的堆内存转移给另外一个...
std::auto_ptr<int> ap2; ap2.reset(new int(8)); return 0; } 编译结果: 从警告deprecated 单词表明这个std::auto_ptr已经在新的标准中被抛弃了。 智能指针对象 ap1 和 ap2 均持有一个在堆上分配 int 对象,其值均是 8,这两块堆内存均可以在 ap1 和 ap2 释放时得到释放。这是 std::auto_ptr ...
// 不可复制 - 反例:尝试拷贝std::unique_ptr std::unique_ptr<int> ptr1(new int(42)); std::unique_ptr<int> ptr2 = ptr1; // 错误:尝试拷贝unique_ptr // 解释:std::unique_ptr设计为不可拷贝,此行代码会导致编译错误,因为试图违反其独占所有权的原则。 // 转移所有权后原unique_ptr变为nul...
创建一个 std::unique_ptr,并指定一个自定义的删除器 customDeleter,用于释放资源。void customDeleter(int* ptr) {std::cout << "Deleting memory at address: " << ptr << std::endl;delete ptr;}int main() {std::unique_ptr<int, decltype(&customDeleter)> ptr(new int(42), customDeleter);...
自动释放资源:当std::unique_ptr超出作用域时,自动释放所管理的对象。 不可复制:std::unique_ptr不允许复制,但可以移动。 主要操作 创建和初始化 可以通过new操作符创建并初始化std::unique_ptr: std::unique_ptr<int>ptr1(newint(10));// 管理一个动态分配的 int 对象 ...
std::unique_ptr<int>clone(int val){std::unique_ptr<int>p(newint(val));returnp;}intmain(){int num=5;std::unique_ptr<int>up=clone(num);return0;} std::unique_ptr与std::move不解之缘 std::unique_ptr无法被复制,但可以使用移动构造将std::unique_ptr对象持有的堆内存转移给另外一个对象,...
首先介绍std::make_unique,它是C++11标准库中的一个实用函数,用于创建一个std::unique_ptr智能指针,并将其指向一个新分配的对象。使用std::make_unique比直接使用new表达式更安全,因为它可以防止资源泄漏,并提供异常安全保证。接下来,我们将详细讨论std::unique_ptr,它是一个模板类,提供了对动态...