Привет Всем!
Проблдема в следующем:
1. для своего некоторого члена, класс выделяет память из кучи;
2. В классе существует метод, который возвращает указатель на эту память;
так вот как сделать так, чтоб возвращенный указатель нельзя было бы удалить во внешней программе???
т.е чтоб только класс её мог дельнуть.
Здравствуйте, Fynjisx, Вы писали:
F>Привет Всем! F>Проблдема в следующем: F>1. для своего некоторого члена, класс выделяет память из кучи; F>2. В классе существует метод, который возвращает указатель на эту память; F>так вот как сделать так, чтоб возвращенный указатель нельзя было бы удалить во внешней программе??? F>т.е чтоб только класс её мог дельнуть.
держать в классе shared_ptr, а возвращать weak_ptr?
Здравствуйте, Fynjisx, Вы писали:
F>Привет Всем! F>Проблдема в следующем: F>1. для своего некоторого члена, класс выделяет память из кучи; F>2. В классе существует метод, который возвращает указатель на эту память; F>так вот как сделать так, чтоб возвращенный указатель нельзя было бы удалить во внешней программе??? F>т.е чтоб только класс её мог дельнуть.
Использовать shared_ptr или сделать обертку над указателем со всеми необходимыми методами. Для указателя на класс может оказаться вполне достаточно и этого:
Если это указатель на массив, то необходимо переопределить operator[]. Если указатель необходимо передать какойто С-шной функции, можно подумать о том, чтобы добавить метод в обертку вызывающий данную С функцию. Ну и так далее и в том же духе.
Здравствуйте, Fynjisx, Вы писали:
F>Привет Всем! F>Проблдема в следующем: F>1. для своего некоторого члена, класс выделяет память из кучи; F>2. В классе существует метод, который возвращает указатель на эту память; F>так вот как сделать так, чтоб возвращенный указатель нельзя было бы удалить во внешней программе??? F>т.е чтоб только класс её мог дельнуть.
Например можно возвращать некий прокси-объект, у которого перегружен operator->.
Здравствуйте, Fynjisx, Вы писали:
F>Привет Всем! F>Проблдема в следующем: F>1. для своего некоторого члена, класс выделяет память из кучи; F>2. В классе существует метод, который возвращает указатель на эту память; F>так вот как сделать так, чтоб возвращенный указатель нельзя было бы удалить во внешней программе??? F>т.е чтоб только класс её мог дельнуть.
Закрой у члена класса деструктор. Агрегирующий класс сделай другом члена.
Re: невозможность удаления указателя
От:
Аноним
Дата:
21.07.08 08:48
Оценка:
class IReturned
{
public:
virtual ~IReturned(){} = 0;
};
class Returner
{
class Returned : public IReturned
{
bool _can_delete;
public:
Returned():_can_delete(false)
{
}
virtual ~Returned()
{
if (!_can_delete)__asm int 3;
}
void AllowDelete()
{
_can_delete = true;
}
};
Returned _returned;
public:
~Returner()
{
_returned.AllowDelete();
}
IReturned *GetIt()
{
return &returned
}
};