#include <vector> #include <thread> std::vector<int*> vec; void func() { for (int i = 0; i < 10; ++i) { vec.push_back(new int[i]); } } int main() { std::thread t1(func); std::thread t2(func); t1.join(); t2.join(); // 错误地忘记释放内存 return 0; } 运行Lea...
最后剩下的占有对象的shared_ptr被销毁; 最后剩下的占有对象的shared_ptr被通过operator=或reset()赋值为另一指针。 #include <iostream>#include<memory>#include<thread>#include<chrono>#include<mutex>classObject {public: Object(intid) : m_id(id) { std::cout<<"init obj"<< m_id <<std::endl; ...
}intmain(){unique_ptr<int>upt(newint(10));//必须使用move函数,否则编译不过threadt(f1, move(upt)); t.detach(); pthread_exit(NULL); } 5,函数的指针作为参数传递 #include<iostream>#include<thread>#include<string>#include<unistd.h>using namespacestd;classTest{public:voidfunc(int& i){cout<...
thread first ( thread_1); // 开启线程,调用:thread_1() thread second (thread_2,100); // 开启线程,调用:thread_2(100) //thread third(thread_2,3);//开启第3个线程,共享thread_2函数。 std::cout << "主线程\n"; first.join(); //必须说明添加线程的方式 second.join(); std::cout <<...
unique_ptr:这是一种独占所有权的智能指针。在任何时候,只能有一个unique_ptr指向一个对象。当这个unique_ptr被销毁时,它所指向的对象也会被删除。 weak_ptr:这是一种不控制对象生命周期的智能指针。它是为了解决shared_ptr可能导致的循环引用问题而设计的。
智能指针使用:shared_ptr、weak_ptr、unique_ptr等 一些关键字的作用:static、const、volatile、extern 四种类型转换:static_cast, dynamic_cast, const_cast, reinterpret_cast STL部分容器的实现原理,如 vector、deque、map、hashmap 模板特化、偏特化,萃取 traits 技巧 ...
shared_ ptr,unique_ ptr basic_ regex,sub_ match 函数对象模板function, bind 新特性的线程,协程,原子操作,lamda表达式 atomic的用法与原理 thread_ local 与condition_ var iable 异常处理exception_ _ptr 错误处理error _ category coroutine的用法与原理 ...
Thread T1 (tid=16917, finished) created by main thread at:#0 pthread_create ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:969 (libtsan.so.0+0x605b8)#1 std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> ...
unique_ptr weak_ptr auto_ptr(被 C++11 弃用)Class shared_ptr 实现共享式拥有(shared ownership)概念。多个智能指针指向相同对象,该对象和其相关资源会在 “最后一个 reference 被销毁” 时被释放。为了在结构较复杂的情景中执行上述工作,标准库提供 weak_ptr、bad_weak_ptr 和 enable_shared_from_this 等辅助...
#include<thread>std::thread myThread([](){/* 线程的代码 */}); 7、nullptr 关键字 引入了nullptr来替代原来的NULL,避免了在指针操作中的一些潜在问题。 Copycodeint* ptr =nullptr; 8、初始化列表 引入了初始化列表语法,使得初始化更加直观和简洁。