随笔分类 - C++
发表于 2022-04-11 18:42阅读:279评论:0推荐:0
摘要:线程安全的 class 应当满足的条件 多个线程同时访问时,其表现出正确的行为 无论操作系统如何调度这些线程,无论这些线程的执行顺序如何交织 调用端代码无须额外的同步或其他协调动作 对象创建的线程安全 对象创建要做到线程安全,唯一的要求就是在构造期间不要泄露 this 指针: 不要在构造函数中注册任
阅读全文 »
发表于 2021-05-11 18:39阅读:165评论:0推荐:0
摘要:new 和 delete 的执行过程 new 的执行过程 通过 operator new 申请内存 调用构造函数(简单类型忽略此步) 返回内存指针 delete 的执行过程 调用析构函数(简单类型忽略此步) 释放内存 using namespace std; class T { public: T(
阅读全文 »
发表于 2020-08-13 19:59阅读:197评论:0推荐:0
摘要:二维 vector 定义二维数组有如下几种方法,例如定义 3x3 的 vector: 第一种方法 vector<vector<int>> vec; vec.resize(3); for (int i = 0; i < vec.size(); i++) vec[i].resize(3); 第二种方法
阅读全文 »
发表于 2020-08-09 17:34阅读:1672评论:0推荐:0
摘要:std::iterator std::iterator 是一个模板类,其声明为: template< class Category, class T, class Distance = std::ptrdiff_t, class Pointer = T*, class Reference = T&
阅读全文 »
发表于 2020-08-09 17:08阅读:279评论:0推荐:0
摘要:例如下面的代码: typedef typename std::vector<T>::size_type size_type; 查看 vector 源码可以看到: template <class T,class Alloc=alloc> class vector{ public: //... type
阅读全文 »
发表于 2020-08-09 16:30阅读:785评论:0推荐:0
摘要:有时候,进行类设计时,会发现某个类的对象是独一无二的,没有完全相同的对象,也就是对该类对象做副本没有任何意义。 因此,需要限制编译器自动生动的拷贝构造函数和赋值函数,DISALLOW_COPY_AND_ASSIGN 可以起到这个作用: // A macro to disallow the copy
阅读全文 »
发表于 2020-04-15 11:41阅读:1893评论:0推荐:0
摘要:数组的智能指针的限制 unique_ptr 的数组智能指针,没有* 和 -> 操作,但支持下标操作[]。 shared_ptr 的数组智能指针,有 * 和 -> 操作,但不支持下标操作[],只能通过 get() 去访问数组的元素。 shared_ptr 的数组智能指针,必须要自定义deleter。
阅读全文 »
发表于 2020-04-04 16:16阅读:704评论:0推荐:0
摘要:创建线程 每个程序至少有一个执行 main 函数的线程,其他线程也有自己的入口函数,两者会同时运行。 #include <thread> #include <iostream> void f() { std::cout << "hello world"<<std::endl; } int main(
阅读全文 »
发表于 2020-04-04 09:07阅读:917评论:0推荐:0
摘要:什么是并发 计算机术语中的"并发",指的是在单个系统里同时执行多个独立的活动,而不是顺序的一个接一个的执行。 对于单核CPU来说,在某个时刻只可能处理一个任务,但它却不是完全执行完一个任务再执行一个下一任务,而是一直在任务间切换,每个任务完成一点就去执行下一个任务,看起来就像任务在并行发生,虽然不是
阅读全文 »
发表于 2019-12-31 10:10阅读:272评论:0推荐:0
摘要:C++'s most vexing parse 是 Scott Meyers 在其名著《Effective STL》中创造的一个术语。Scott 用这个术语来形容 C++ 标准对于 declaration 语句的消歧义(ambiguity resolution)约定与常人的认知相悖。 形如 Type
阅读全文 »