У меня есть следующий установщик и получатель, который дает мне необработанные указатели.
К ним также можно получить доступ из разных потоков. Я хочу сделать m_pObj общим указателем - - std :: shared_ptr <(IMyInterface> m_pObj;
Код был таким.
Если m_obj не равен NULL, я должен освободить и назначить новый указатель в SetPointer
void MyClass::SetPointer(IMyInterface* pObj)
{
EnterCriticalSection(&cs1)
if (NULL != m_pObj)//Member variable to hold the incoming pointer
{
m_pObj>Release();
m_pObj= NULL;
}
m_pObj= pObj;
if (NULL != m_pObj )
{
m_pObj->AddRef();
}
LeaveCriticalSection(&cs1)
}
IMyInterface* MyClass::GetPointer()
{
EnterCriticalSection(&cs1)
if (NULL != m_pObj)
{
m_pObj->AddRef();
}
LeaveCriticalSection(&cs1)
return m_pObj;
}
void MyClass::SetPointer(IMyInterface* pObj)
{
if (NULL != m_pObj)
{
m_pObj->Release();
m_pObj= NULL;
}
m_pObj = std::shared_ptr<IMyInterface>(pObj));
}
При доступе к геттеру в другом классе он также должен увеличить счетчик ссылок, для общего указателя, я думаю, мне просто нужно присвоить его локальному общему указателю rit? Будет ли он автоматически увеличивать счетчик ссылок?
std::shared_ptr<IMyInterface> MyClass::GetPointer()
{
return m_pObj;
};
доступ из другого места
std::shared_ptr<IMyInterface> pObj1 = GetPointer();//hope it would increase th reference count
Обе функции могут быть доступны из разных потоков - возможно, в других местах вызывается метод получения, и прежде чем я добавлю метод определения, вызванный из другого потока и выпустивший его, так же был и CS для. В данном случае это так нужен? Модифицированный в порядке?