Ниже приведен эскиз того, как я мог бы иметь некоторую форму автоматизированного управления памятью в C++:C Управление памятью
template<class T>
class Ptr{
public:
/* Some memory management stuff (ref counting etc.)
as Ptr object is initialized */
Ptr(...) { .. }
/* Manage reference counts etc.
as Ptr object is copied -- might be necessary
when Ptr is passed to or returned from functions */
Ptr<T>& operator=(..) { .. };
/* Do memory management stuff
when this "Pointer" object is destroyed. */
~Ptr() { .. }
private:
/* Pointer to main object */
T* object;
}
class Obj{
public:
static Ptr<Obj> newObj(..) { return Ptr<Obj>(new Obj(..)); }
private:
/* Hide constructor so it can only be created by newObj */
Obj(..) { .. }
/* some variables for memory management routines */
int refcnt;
..
}
Таким образом, конечный пользователь не должен вызывать новые или таНос, и может вместо вызовите Obj.newObj (..).
Однако я довольно озадачен о том, как я мог бы сделать что-то подобное для C.
Это не должно быть так же, как и выше, но я не хочу, чтобы заботиться об управлении памяти, когда это не важно.
Самая большая проблема, которую я чувствую, заключается в том, что когда переменная в C выходит из области видимости, у меня действительно нет деструктора, который может быть сигнализирован, чтобы сообщить мне, что переменная вышла за рамки.
Почему вы создаете свои собственные умные указатели? – delnan
Если вам нужны интеллектуальные указатели, вы не должны использовать C. – Pubby