C Управление памятью - PullRequest
       2

C Управление памятью

0 голосов
/ 20 января 2012

Ниже приведен набросок того, как у меня может быть какая-то форма автоматического управления памятью в 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;
  ..
}

Таким образом, конечный пользователь никогда не должен вызывать new или malloc и вместо этого может вызватьObj.newObj (..).

Тем не менее, я довольно озадачен тем, как я могу сделать что-то подобное для C.

Это не обязательно должно быть так же, как описано выше, ноя не хочу заботиться об управлении памятью, когда это не важно.

Самая большая проблема, которую я чувствую, заключается в том, что когда переменная в C выходит из области видимости, у меня нет'деструктор', о котором можно сообщить, чтобы сообщить, что переменная вышла из области видимости.

Ответы [ 2 ]

2 голосов
/ 20 января 2012

Да, это главное преимущество C ++.Вы можете создавать классы, которые инкапсулируют функциональность.И эта функциональность может включать конструкторы и деструкторы для обеспечения того, чтобы данные создавались, управлялись и уничтожались контролируемым образом.

В C нет такой опции, если вы не реализуете всю среду, поддерживающую такую ​​опцию.1003 *

1 голос
/ 20 января 2012

Полное решение и ответ на ваш вопрос см. GObject .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...