std::unique_ptr:提供独占所有权的智能指针。 std::shared_ptr:提供共享所有权的智能指针。 函数对象与Lambda表达式: 函数对象(也称为仿函数):std::function可以存储、复制和调用任何可调用目标——函数、Lambda表达式、bind表达式或其他函数对象。 Lambda表达式:提供了一种简洁的创建匿名函数对象的方式。
使用shared_ptr<void>代替void*可以解决声明周期管理的问题。shared_ptr有足够的类型信息以了解如何正确销毁它指向的对象。 structday{ // ...things... std::shared_ptr<void> user_data; }; structmonth{ std::vector<day> days; std::shared_ptr<void> user_data; }; ... some_day.user_data = st...
std::shared_ptr 交换时注意实现 6. 移动语义、移动构造函数和右值引用为什么有这些技术,以及有那些应用场景 1. 前言(需要明白的点) 移动语义和右值引用的确涉及到在某些情况下的内存地址传递,但它并不仅仅是对内存地址交换的一个命名。移动语义是C++语言层面上的一个特性,它使得资源可以在对象之间安全地转移,而不...
当一个shared_ptr析构或者被用于管理其它裸指针时,这个引用计数器就减1,如果此时发现引用计数器为0,...
C++11新特性中主要有两种智能指针std::shared_ptr和std::unique_ptr。 那什么时候使用std::shared_ptr,什么时候使用std::unique_ptr呢? 当所有权不明晰的情况,有可能多个对象共同管理同一块内存时,要使用std::shared_ptr; 而std::unique_ptr强调的是独占,同一时刻只能有一个对象占用这块内存,不支持多个对象共同...
shared_ptr<> C++中的RAII机制(Resource Acquisition Is Initialization) 涉及到 多线程 以及 互斥锁 #include <pthread.h> std::variant<int, long, std::string, bool> 类似union std:get<>() std::visit(函数对象,class... Variants) std::make_pair() ...
创建测试程序,来测试DLL。新建一个控制台空项目,在源文件中添加main.cpp文件,然后添加如下代码: #include"opencv2/opencv.hpp" #include"mytest.h" intmain(intargc,char** argv){ std::cout<<"test mydll..."<<std::endl; std::shared_ptr<MyTestDLL> mydll(newMyTestDLL); ...
明确所有权语义:使用智能指针(如std::unique_ptr或std::shared_ptr)作为参数可以明确表示所有权的转移或共享。 自动内存管理:智能指针会自动管理对象的生命周期,减少内存泄漏的风险。 但是,所有权转移可能不总是期望的行为:例如,如果一个函数接受一个std::unique_ptr参数,那么这通常意味着函数将接管对象的所有权。这...
std::shared_ptr和std::weak_ptr的特化必须满足可复制构造(CopyConstructible)和可复制赋值(CopyAssignable)。另外,std::shared_ptr的特化必须满足可小于比较(LessThanComparable),而且可以转换到bool。 std::istreambuf_iterator的特化必须有平凡的复制构造函数,constexpr 默认构造函数,和平凡的析构函数。
在 C++20 之前,std::make_shared 仅支持单个对象的创建,而数组的管理需要借助 std::unique_ptr 或手动管理 new[] 和 delete[]。C++20 的更新填补了这一空白,使得 std::make_shared 能够直接支持数组的创建和管理。 码事漫谈 2025/03/15 1890 C++20 `<bit>` 中的整数 2 的幂运算和 `std::bit_cast`...