std::cout << "reset pointer3:" << std::endl; std::cout << "pointer.use_count() = " << pointer.use_count() << std::endl; // 1 std::cout << "pointer2.use_count() = " << pointer2.use_count() << std::endl; // 0 std::cout << "pointer3.use_count() = " << po...
autoptr3 = ptr1->getShared(); std::cout <<"使用计数: "<< ptr1.use_count() << std::endl;// 输出 3 // ptr2和ptr3离开作用域,但对象不会被删除 } std::cout <<"使用计数: "<< ptr1.use_count() << std::endl;// 输出 1 // ptr1离开作用域,对象被删除 } 比较unique_ptr 和 ...
std::cout << "Value: " << ptr1->GetValue() << std::endl; // 创建另一个 shared_ptr,共享 ptr1 所指向的对象 std::shared_ptr<MyClass> ptr2(ptr1); // 当 ptr1 和 ptr2 都离开作用域时,MyClass 对象会被自动释放 } // 2 共享 int main() { std::shared_ptr<MyClass> ptr = st...
{std::shared_ptr<Object>ptr(newObject());// 当ptr的作用域结束时,如果它是唯一的shared_ptr,资源将被释放}// ptr被销毁,如果它是指向Object的最后一个shared_ptr,Object的内存将被释放 上述代码,是当std::shared_ptr超出了其作用域,就会被销毁了,如果我们还需要使用当前Object的对象的数据时,因为当前的内...
std::unique_ptr std::unique_ptr 是一种独占的语义,即只允许一个智能指针引用裸指针,这区别于 std::shared_ptr 允许多个 shared_ptr 引用同一个裸指针,它没有引用计数,它的性能比 shared_ptr 会...
ptr_fun(Result(*f)(Arg1, Arg2)); (2)(C++11 中弃用) (C++17 中移除) 创建函数包装器对象(std::pointer_to_unary_function或std::pointer_to_binary_function),从模板实参推导目标类型。 1) 等效地调用std::pointer_to_unary_function<Arg,Result>(f)。
在并行区域中只能使用data pointer的异常处理通过std::exception_ptr实现。std::exception_ptr是可空的pointer-like类型,管理由std::current_exception捕获的异常对象。默认构造的std::exception_ptr为空指针,不指向异常对象。两个std::exception_ptr实例相等仅在它们都为空或都指向同一异常对象时成立。std...
std::weak_ptr并不是一种独立的智能指针,而是std::shared_ptr的一种扩充。 std::weak_ptr一般是由std::shared_ptr创建的,之后两者就指涉到相同的控制块,但std::weak_ptr并不会影响所指涉对象的引用计数。 二、使用场景 1. 带缓存功能的工厂函数 ...
std::unique_ptr是 C++11 引入的智能指针,用于自动管理动态分配的对象,确保在智能指针超出作用域时自动释放资源。与传统指针相比,std::unique_ptr提供了更安全和高效的内存管理方式。以下是对std::unique_ptr的详细讲解。 基本概念 std::unique_ptr是一种独占所有权的智能指针,这意味着同一时间只能有一个std::uniq...
std::function< void (void*) > deleter;T * p;template <typename U> my_unique_ptr( U * p,...