Вот кратчайший способ слияния двух массивов.
var array1 = [1,2,3]
let array2 = [4,5,6]
Объединить / объединить их
array1 += array2
New value of array1 is [1,2,3,4,5,6]
В основном, любое время, Вы хотите, чтобы некоторый другой класс был ответственен за жизненный цикл объектов Вашего класса, или у Вас есть причина предотвратить разрушение объекта, можно сделать деструктор частным.
, Например, при выполнении своего рода вещи подсчета ссылок у Вас может быть объект (или менеджер, который был "другом" редактор), ответственный за подсчет количества ссылок на себя, и удалите его, когда число поражает нуль. Частный dtor препятствовал бы тому, чтобы кто-либо еще удалил его, когда были все еще ссылки на него.
Для другого экземпляра, что, если у Вас есть объект, который имеет менеджера (или оно), который может уничтожить его или может отказаться уничтожать его в зависимости от других условий в программе, таких как соединение с базой данных, являющееся открытым или записанный файл. У Вас могли быть "request_delete" метод в классе или менеджер, который проверит, что условие и он или удалят или уменьшат и возвратят состояние, говоря Вам, что это сделало. Это намного более гибко, который "удаляет" просто вызов.
Такой объект никогда не может создаваться на стеке. Всегда на "куче". И удаление должно быть сделано через друга или участника. Продукт может использовать иерархию отдельного объекта и пользовательского диспетчера памяти - такие сценарии могут использовать частный dtor.
#include <iostream>
class a {
~a() {}
friend void delete_a(a* p);
};
void delete_a(a* p) {
delete p;
}
int main()
{
a *p = new a;
delete_a(p);
return 0;
}
COM использует эту стратегию удаления экземпляра. COM делает деструктор частным и обеспечивает интерфейс для удаления экземпляра.
Вот пример того, на что был бы похож метод Выпуска.
int MyRefCountedObject::Release()
{
_refCount--;
if ( 0 == _refCount )
{
delete this;
return 0;
}
return _refCount;
}
COM-объекты ATL являются главным примером этого шаблона.
Когда Вы не хотите, чтобы пользователи получили доступ к деструктору, т.е. Вы хотите, чтобы объект только был уничтожен через другие средства.
http://blogs.msdn.com/larryosterman/archive/2005/07/01/434684.aspx дает пример, где объект является считаемой ссылкой и должен только быть уничтожен самим объектом, когда количество переходит к нулю.
Я знаю, что Вы спрашивали о частном деструкторе. Вот то, как я использую защищенные. Идея - Вы, не хотят удалять основной класс через указатель на класс, который добавляет дополнительную функциональность к основному.
В примере ниже я не хочу, чтобы GuiWindow был удален через указатель HandlerHolder.
class Handler
{
public:
virtual void onClose() = 0;
protected:
virtual ~Handler();
};
class HandlerHolder
{
public:
void setHandler( Handler* );
Handler* getHandler() const;
protected:
~HandlerHolder(){}
private:
Handler* handler_;
};
class GuiWindow : public HandlerHolder
{
public:
void finish()
{
getHandler()->onClose();
}
virtual ~GuiWindow(){}
};
Класс может только быть удален отдельно. Полезный, если Вы создаете некоторую попытку ссылки считаемый объект. Тогда только метод выпуска может удалить объект, возможно помогая Вам избежать ошибок.
Это мог бы быть способ иметь дело с проблемой в Windows, где каждый модуль может использовать различную "кучу", такой как Отладка "куча". Если та проблема не решена правильно плохой , вещи могут произойти.