[英]shared_ptr use_count() return 0 after assignment operator (=)
Im new to shared_ptr
and can't wrap my around this,我是
shared_ptr
的新手,无法解决这个问题,
I want to store shared_ptr
in custom struct
.我想将
shared_ptr
存储在自定义struct
中。
struct ThreadSafeQMsg
{
ThreadSafeQMsg(shared_ptr<ptree> control, shared_ptr<uint32_t> data=0, int data_size=0) {
data_size = data_size;
data = data;
control = control;
}
size_t data_size;
shared_ptr<ptree> control;
shared_ptr<uint32_t> data;
};
ThreadSafeQMsg* tmsg = new ThreadSafeQMsg(control,spData, data_size);
PRINT_LOG("message with data[" << std::dec << tmsg->data_size << ",ref: " << std::dec << tmsg->data.use_count()
<< "] & control[ref: " << std::dec << tmsg->control.use_count() << "]");
before assignment I see the that the ref count is 1 when checking after assignment I get:在分配之前,我看到在分配后检查时引用计数为 1,我得到:
message with data[140737018606128,ref: 0] & control[ref: 0]
what am I missing here?我在这里想念什么?
Inside the constructor, the names of parameters hide the names of data members;在构造函数内部,参数的名称隐藏了数据成员的名称; so these assignments like
data_size = data_size;
所以这些赋值像
data_size = data_size;
are just assigning the parameters to themselves and have nothing to do with the data members, which are kept default-initialized.只是将参数分配给自己,与保持默认初始化的数据成员无关。
You can initialize them in member initializer list as您可以在成员初始化程序列表中将它们初始化为
ThreadSafeQMsg(shared_ptr<ptree> control, shared_ptr<uint32_t> data=0, int data_size=0)
: data_size(data_size),
control(control),
data(data) {
}
Or if you want to stick to assignment (but applying member initializer list is better in general).或者,如果您想坚持分配(但通常应用成员初始值设定项列表更好)。
ThreadSafeQMsg(shared_ptr<ptree> control, shared_ptr<uint32_t> data=0, int data_size=0) {
this->data_size = data_size;
this->data = data;
this->control = control;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.