同步操作将从 secondtonone1/cpplearn 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include "../inc/single_2.h"#include <iostream>#include <thread>using namespace std;//懒汉式//在类的cpp文件定义static变量SinglePointer *SinglePointer::single = nullptr;std::mutex SinglePointer::s_mutex;// 智能指针方式std::shared_ptr<SingleAuto> SingleAuto::single = nullptr;mutex SingleAuto::s_mutex;//智能指针初始化为nullptrstd::shared_ptr<SingleAutoSafe> SingleAutoSafe::single = nullptr;mutex SingleAutoSafe::s_mutex;//也可以定义删除函数void SafeDelFunc(SingleAutoSafe *f){delete f;}//饿汉式初始化Single2Hungry *Single2Hungry::single = Single2Hungry::GetInst();void test_single2(){//多线程情况下可能存在问题cout << "s1 addr is " << &Single2::GetInst() << endl;cout << "s2 addr is " << &Single2::GetInst() << endl;}void thread_func_s2(int i){cout << "this is thread " << i << endl;cout << "inst is " << Single2Hungry::GetInst() << endl;}void test_single2hungry(){cout << "s1 addr is " << Single2Hungry::GetInst() << endl;cout << "s2 addr is " << Single2Hungry::GetInst() << endl;for (int i = 0; i < 3; i++){thread tid(thread_func_s2, i);tid.join();}}void thread_func_lazy(int i){cout << "this is lazy thread " << i << endl;cout << "inst is " << SinglePointer::GetInst() << endl;}void test_singlelazy(){for (int i = 0; i < 3; i++){thread tid(thread_func_lazy, i);tid.join();}//何时释放new的对象?造成内存泄漏}void test_singleDangours(){cout << "s1 addr is " << &Single2Del::GetInst() << endl;cout << "s2 addr is " << &Single2Del::GetInst() << endl;//如果外层不小心delete会出现问题auto pinst1 = &Single2Del::GetInst();// delete会造成崩溃// delete pinst1;//多次deleteauto sp1 = SinglePointer::GetInst();auto sp2 = SinglePointer::GetInst();cout << "sp1 is " << sp1 << endl;cout << "sp2 is " << sp2 << endl;//什么时候释放是个问题delete sp1;//二次释放造成崩溃// delete sp2;}void test_singleauto(){auto sp1 = SingleAuto::GetInst();auto sp2 = SingleAuto::GetInst();cout << "sp1 is " << sp1 << endl;cout << "sp2 is " << sp2 << endl;//此时存在隐患,可以手动删除裸指针,造成崩溃// delete sp1.get();}void test_singleautosafe(){auto sp1 = SingleAutoSafe::GetInst();auto sp2 = SingleAutoSafe::GetInst();cout << "sp1 is " << sp1 << endl;cout << "sp2 is " << sp2 << endl;//此时无法访问析构函数,非常安全// delete sp1.get();}void test_singlenet(){auto sp1 = SingleNet::GetInst();auto sp2 = SingleNet::GetInst();cout << "sp1 is " << sp1 << endl;cout << "sp2 is " << sp2 << endl;}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。