std::make_unique 是 C++11 标准库中的一个实用函数,它是 C++14 标准中引入的,用于创建一个 std::unique_ptr 智能指针,并将其指向一个新分配的对象。使用 std::make_unique 比直接使用 new 表达式更为安全,因为它可以防止资源泄漏,并提供异常安全保证。 std::unique_ptr 是一个模板类,它提供了对动态分配对...
在C++中,std::unique_ptr 可以理解为,独占了内存的所有权 我们不能让另外的指针也同时获得其所有权。 所以只能通过move,来转移所有权。
在上述代码中,我们首先创建了一个空的std::vector<std::unique_ptr<int>>对象,表示一个存储unique_ptr<int>类型的向量。 接下来,我们使用std::make_unique函数创建了一个int类型的unique_ptr对象,并将其初始化为42。然后,我们通过std::move将ptr的所有权转移到vec的末尾,即将unique_ptr<int>对象添加到向量中。
std::unique_ptr是一种独占的语义,即只允许一个智能指针引用裸指针,这区别于std::shared_ptr允许多个shared_ptr引用同一个裸指针,它没有引用计数,它的性能比shared_ptr会高一点。 在用法上std::unique_ptr和std::shared_ptr是类似的,主要的不同是std::unique_ptr之间的赋值需要通过std::move实现。 在code2 ...
因此,不建议将std::unique_ptr移动到自身。应该遵循移动语义的一般惯例,即将unique_ptr转移给另一个unique_ptr或将其传递给函数。 需要注意的是,虽然不推荐将unique_ptr移动到自身,但可以使用std::move函数将unique_ptr的所有权转移给其他unique_ptr。示例代码如下: ...
std::move只是一个从左值到右值的强制转换操作符,实际上没有数据在该点移动。std::move的一个更好...
// std::unique_ptr<MyClass> ptr2 = ptr1; // 编译错误 // 可以移动unique_ptr std::unique_ptr<MyClass> ptr2 = std::move(ptr1); // ptr1现在为空 if(ptr1 ==nullptr) { std::cout <<"ptr1 is null\n"; } // ptr2现在拥有对象 ...
unique_ptr与std::move的使用,形参为unique_ptru2,而后实参为std::move(unique_ptru1),这样会将原本u1的内存传递给u2,避免了传递拷贝。例如:
unique_ptr<>,在move以后,本身变成了null. 第三点 实际上是接着第二点的 我发现 std::unique_ptr<AAA> pp ,实际上是类unique_ptr<T>的一个实例,既然是类的实例,作为函数参数时,就应该使用引用方式. 以及右值引用方式,于是就改成了下面的代码(请手动忽略没加const的问题) ...
std::unique_ptr 是一种独占的语义,即只允许一个智能指针引用裸指针,这区别于 std::shared_ptr 允许多个 shared_ptr 引用同一个裸指针,它没有引用计数,它的性能比 shared_ptr 会高一点。