unique_ptr使用独占所有权的方式管理资源,即同一时间只能有一个unique_ptr拥有指向该对象的指针。 构造unique_ptr<int>和int对象时,可以通过以下方式实现: 构造unique_ptr<int>对象: unique_ptr<int> ptr(new int); 这样会创建一个int类型的动态内存,并将其地址传递给unique_ptr对象ptr。unique_ptr负责管理该内存...
std::unique_ptr<int> unique_ptr_p2(new int);//创建的指针,指向的内存没有初始化 std::unique_ptr<int> unique_ptr_p3(new int(0));//创建的指针,初始化为0 std::unique_ptr<int> unique_ptr_p4(new int{});//创建的指针,初始化为0 std::unique_ptr<int> unique_ptr_p5(new int{0});//...
与shared_ptr不同,某个时刻只能有一个unique_ptr指向一个给定的对象。当unique_ptr被销毁时,它所指向的对象也被销毁。uniptr_ptr表达的是一种独占的思想。 初始化 #include <iostream> #include <memory> using namespace std; //常规操作 int main(int argc, char *argv[]) { unique_ptr<double> p1; /...
虽然两个unique_ptr不可以同时指向同一个内存对象,但是可以将一个即将销毁的unqie_ptr指针拷贝或赋值给另一个unqie_ptr 函数的参数传递和返回值就是一个很好的例子 //因为在函数内部的unique_ptr指针随着作用域的结束会自动销毁,因此可以将其作为返回值,然后将内存传递给另一个unique_ptr指针管理 unique_ptr<int>...
unique_ptr<int> p2(new int(56)); //!p2指向了一个值为42的int unique_ptr<string> pstr(new string("strtest")); // unique_ptr<string> pstrCopy(pstr); //!error: 不支持对象的拷贝 unique_ptr<string> pstrAssin; // pstrAssin = pstr //!error: uniptr不支持赋值 ...
unique_ptr<int> u_i; //创建空智能指针 u_i.reset(new int(3)); //绑定动态对象 unique_ptr<int> u_i2(new int(4));//创建时指定动态对象 unique_ptr<T,D> u(d); //创建空 unique_ptr,执行类型为 T 的对象,用类型为 D 的对象 d 来替代默认的删除器 delete ...
未初始化的 unique_ptr 表示空指针,对其进行使用会导致程序崩溃。 unique_ptr<int> ptr2; *ptr2 = 2; // 导致崩溃,因为没有进行初始化,操作了空指针 一个对象只能被单个 unique_ptr 所引用,所以禁止拷贝,而且在向另一个 unique_ptr 赋值的时候,要特别留意,必须用 std::move() 函数显式地声明所有权转移...
从函数返回unique_ptr unique_ptr<T>不允许复制构造,而是支持移动语义。然而,我可以unique_ptr<T>从函数返回一个并将返回的值赋给变量。 #include <iostream>#include <memory>using namespace std;unique_ptr<int> foo(){ unique_ptr<int> p( new int(10) ); return p; // 1 //return move( p );...
move是std::move函数的应用,用于将一个std::unique_ptr的所有权转移给另一个std::unique_ptr。这通常用于函数返回值优化(RVO)或在容器中移动对象。 std::unique_ptr<int>ptr1(newint(10));std::unique_ptr<int>ptr2=std::move(ptr1);// ptr1 的所有权转移给 ptr2// 注意:此时 ptr1 变为空,ptr2...
unique_ptr的用法如下: 1.创建unique_ptr对象: 可以通过new运算符或make_unique函数创建unique_ptr对象,如下所示: ``` std::unique_ptr<int> ptr1(new int(10)); auto ptr2 = std::make_unique<int>(20); ``` 2.访问指针所指向的对象: 可以使用*运算符或get函数访问指针所指向的对象,如下所示: `...