Название шаблона создает в конструкторе, удаляет в деструкторе (C++)

Существует немного сценария Bash, названного , создают-dmg , который создает необычный DMGs с пользовательскими фонами, расположением пользовательского значка и именем тома.

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

существует также узел-appdmg , который похож на более современное и активное усилие на основе Node.js; проверьте его также.

10
задан Daniel Daranas 20 June 2013 в 08:48
поделиться

3 ответа

Ответ на ваш вопрос - RAII (получение ресурсов - инициализация).

Но ваш пример опасен :

Решение 1: используйте умный указатель:

class A
{
  public:
     A(): m_b(new B) {}
  private:
     boost::shared_ptr<B> m_b;
};

Решение 2: Помните правило 4:
Если ваш класс содержит «Собственный указатель RAW», вам необходимо переопределить все методы, созданные компилятором.

class A
{
  public:
     A():              m_b(new B)           {}
     A(A const& copy): m_b(new B(copy.m_b)) {}
     A& operator=(A const& copy)
     {
         A  tmp(copy);
         swap(tmp);
         return *this;
     }
    ~A()
     {
         delete m_b;
     }
     void swap(A& dst) throw ()
     {
         using std::swap;
         swap(m_b, dst.m_b);
     }
  private:
     B* m_b;
};

Я использую термин «Собственный указатель RAW» выше, поскольку это самый простой пример. Но RAII применим ко всем ресурсам, и когда ваш объект содержит ресурс, которым вам нужно управлять («Собственный указатель RAW», дескриптор БД и т. Д.).

14
ответ дан 3 December 2019 в 14:18
поделиться

RAII - Инициализация получения ресурсов

19
ответ дан 3 December 2019 в 14:18
поделиться

Этот метод наиболее известен как RAII - инициализация выделения ресурсов . На этом сайте есть собственный тег .

Альтернатива. были предложены более интуитивно понятные имена, в частности:

2
ответ дан 3 December 2019 в 14:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: