Можно ли использовать std :: tr1 :: shared_ptr, как в примере кода, безопасно и правильно, для подсчета ссылок? (Это просто конкретный пример, класс может содержать что-нибудь еще (Недействительными *) вместо FILE *)с использованием std :: tr1 :: shared_ptr как внутренний механизм подсчета ссылок
class File
{
public:
File(const char* path, const char* mode) :
_refcount(new int(0))
{
this->_file = fopen(path, mode);
}
~File()
{
if (this->_refcount.unique())
{
if (this->_file != NULL)
{
fclose(this->_file);
}
}
}
int write(void* buff, size_t size)
{
fwrite(buff, size, 1, this->_file);
}
private:
FILE* _file;
std::tr1::shared_ptr<int> _refcount;
};
Безопасный в каком смысле? Безопасность в памяти? Нить безопасна? – kennytm
@KennyTM Да, безопасный для памяти и потокобезопасный, а также с любых других точек зрения. (Я полагаю, что это не потокобезопасно, может быть, вы можете объяснить, как это можно исправить) –
Я не сказал, что это не потокобезопасно;) Но я бы написал это как решение Джеймса, а не явное ref- счетчик. – kennytm