std::mutex
не копируется и не может быть перемещен. И поскольку newtickerDiary
имеет член типа std::mutex
, он также не может быть скопирован или перемещен (по крайней мере, неявно; вы можете предоставить явные конструкторы копирования / перемещения и операторы присваивания).
Вот почему tDiaries[token] = t;
не удается скомпилировать - он пытается скопировать экземпляр newtickerDiary
. Это не имеет ничего общего с std::shared_ptr
.
Аналогично, for (auto x : tDiaries)
пытается скопировать элементы tDiaries
и завершается неудачно, так как они не копируются. В любом случае, вам, скорее всего, здесь не нужны копии (иначе присвоение x.second.updatesOn
было бы довольно бессмысленным). Сделайте это
for (auto& x : tDiaries)
Обратите внимание на амперсанд.
tDiaries[token].dataPtr[size - 1]
завершается ошибкой, потому что tDiaries[token].dataPtr
не является массивом или контейнером - это указатель на него. Сделай это
(*tDiaries[token].dataPtr)[size - 1]