У меня есть класс, который содержит BYTE*
, счетчик ссылок и CRITICAL_SECTION
, который защищает их обоих от одновременного доступа.
Я хочу заменить все это на std::tr1::shared_ptr<BYTE>
. MSDN говорит, что:
Несколько потоков могут читать и записывать разные объекты shared_ptr одновременно, даже если объекты являются копиями, которые совместно владеют.
Все звучит хорошо, пока я не узнаю, что CRITICAL_SECTION
из класса используется вне его, чтобы «заблокировать» его и изменить его содержимое взаимоисключающим образом. Хорошо, это нарушает инкапсуляцию, я хочу это изменить.
Я знаю, что shared_ptr
гарантирует, что память будет освобождена, но гарантирует ли она взаимное исключение при записи в память?
shared_ptr
не знает, что вы делаете с объектом, на который он указывает. Все, что вам гарантируется, это то, что сам контейнер общего указателя работает правильно, даже если он используется одновременно. - person Kerrek SB   schedule 25.08.2011