Внутри конструктора имена параметров скрывают имена членов данных; поэтому эти назначения, такие как data_size = data_size;
, просто присваивают параметры сами себе и не имеют ничего общего с элементами данных, которые сохраняются инициализированными по умолчанию.
Вы можете инициализировать их в списке инициализаторов элементов как
ThreadSafeQMsg(shared_ptr<ptree> control, shared_ptr<uint32_t> data=0, int data_size=0)
: data_size(data_size),
control(control),
data(data) {
}
Или, если вы хотите придерживаться присваивания (но применение списка инициализаторов членов в целом лучше).
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;
}