Существует немного сценария Bash, названного , создают-dmg , который создает необычный DMGs с пользовательскими фонами, расположением пользовательского значка и именем тома.
я создал его много лет назад для компании, которую я выполнил в то время; это выживает на вкладе других людей с тех пор и по сообщениям работает хорошо.
существует также узел-appdmg , который похож на более современное и активное усилие на основе Node.js; проверьте его также.
Ответ на ваш вопрос - 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», дескриптор БД и т. Д.).
Этот метод наиболее известен как RAII - инициализация выделения ресурсов . На этом сайте есть собственный тег .
Альтернатива. были предложены более интуитивно понятные имена, в частности: