weak_ptr 还记得,shared_ptr内含有指向计数区域(SharedPtrControlBlock)结构体的指针吧 structSharedPtrControlBlock{intshared_count;intweak_count; }; 该结构体引进新的int变量weak_count,来作为弱引用计数 每个weak_ptr都占指针的两倍空间,一个装着原始指针,一个装着计数区域的指针(和shared_ptr一样的成员) 大...
说明 在C/C++程序中,结构化数据通常用结构体来组织,结构体也能够方便的转换为字节流,因此结构化的数据传输本不该成为问题, 但在VC或GCC的默认设置下编译出的程序,却有一个值得注意的问题——结构体的对齐。 结构体的对齐是编译器为加快程序运行,在结构体中填入一些空白字节,是的结构体成员按一定规则对齐。 排查...
std::shared_ptr<std::string>p1=std::make_shared<std::string>("hello"); autop2=std::make_shared<int>(100);// 表示指针 p2 可以指向 int 类型的对象 std::cout<<*p1<<std::endl; std::cout<<*p1<<std::endl; std::vector<int>list={1,2,3}; list.push_back(9); for(autoitem:list...
worker是一个对象,其有一个成员函数可以处理这个cmd。 函数asyncTaskHandler将这个cmd的handler函数以及参数封装到一个结构体中,然后放入队列m_taskQue中,会有任务线程来取任务并执行。 生产者 struct AICTask_t { int cmd; int task_id; taskStatus status; BaseWorker* worker; arg_t* arg; }; int AICTask...
如下面这段代码,通过free()释放结构体,并不会导致智能指针自动释放,而使用delete释放结构体则可以正确地让智能指针释放。 这里涉及到两个小知识点: 1.shared_ptr的原理 每当智能指针对象被释放的时候,其析构函数会将所引用的对象的引用计数减1,如果减到0则释放所引用的对象。这也就意味着,shared_ptr 正常工作的...
结论:结构体的赋值,修改新结构体的内容不会改变原来的那个结构体的值,而指针的赋值,再对指针内容修改则会改变指针指向的那个对象的值,因为指针的赋值其实是将地址传给另一个指针。...定义结构体: struct person { int age; string name; }; 结构体赋值: person p1; p1.age = 12; p1.name = "Mike.....
按理来说,在 C++ 里面,普通的结构体如果没有虚函数的话和自带的数据类型是完全相同的,都是一个内存地址,对应着其大小的字节流,但是在这,不同大小的类型竟然有不同的反应。 于是就调试到 STL 的源码,发现最后一个调用的语句是::operator new(),这个是一个按照字节分配内存的语句,语句把语句单...
程序喵大人已经提到一个内存和执行效率的问题。但还有另一个调用执行顺序的问题,这个现象,如果不是看到...
只声明了结构体student,但是并没有定义,所以是一个 incomplete type,所以sizeof无法执行。 回到unique_ptr,现在我们知道unique_ptr的报错链路是unique_ptr->delete->sizoef,也就是sizeof才是罪魁祸首。所以当Deleter非默认时,就不一定需要知道类型的析构函数。比如下面这样: ...
只声明了结构体student,但是并没有定义,所以是一个 incomplete type,所以sizeof无法执行。 回到unique_ptr,现在我们知道unique_ptr的报错链路是unique_ptr->delete->sizoef,也就是sizeof才是罪魁祸首。所以当Deleter非默认时,就不一定需要知道类型的析构函数。比如下面这样: ...