У меня есть класс, который использует механизм подсчета ссылок. Объекты этого класса в конечном итоге уничтожаются, вызывая delete this
, когда счетчик ссылок падает до нуля. Мой вопрос: могу ли я использовать локальную переменную on-stack после delete this
? Вот конкретный пример:Доступ к локальной переменной после «delete this»
class RefCountedClass
{
public:
RefCountedClass(Mutex& m) :
mutex_(m)
{}
.
.
.
private:
Mutex& mutex_;
void RemoveReference()
{
// As I understand, mutex_ will be destroyed after delete,
// but using m is all right because it is on-stack and
// references an external object. Am I right?
Mutex& m = mutex_;
m.Acquire();
--recount_;
if (refcount <= 0) delete this;
m.Release();
}
};
Наличие объектов подсчет ссылок на себя это плохая идея (Можно ли сказать, если это статическая продолжительность жизни (стек) или динамическая переменная продолжительности жизни (куча). Это то, как работает COM, и из опыта, накопленного сообществом C++, на котором мы перешли, как видно из boost :: shared_ptr, где счетчик ссылок а не часть объекта, посчитанного реферином. –
@MartinYork Я согласен с вами. В общем случае я бы не советовал мне реализовывать такие подсчет ссылок. Это особый случай. К счастью, в моей реальной ситуации конструктор не является публичным, а создание защищено фабричным объектом. – FireAphis