Я пытаюсь найти способ написать собственное средство удаления для массива C, управляемого unique_ptr в шаблонном классе C++. Я целенаправленно пытаюсь сделать утечку памяти класса, заставляя средство удаления ничего не делать. В полном классе некоторые конструкторы выделяют память, а некоторые нет — вместо этого они используют память в буфере необработанных байтов, поступающем из потока данных.
Вот что я пробовал:
template <class T> class Matrix
{
private:
int _size;
std::unique_ptr<T[]> _array;
public:
Matrix(int size, void* data) : _size(size)
, _array(NULL, [](T[]* p){})
{
_array.reset((T*)data);
}
};
Код не компилируется, сообщение об ошибке:
In file included from /tmp/test/test/test.cpp:9:
/tmp/test/test/Matrix.h:22:55: error: expected ')'
, _array(NULL, [](T[]* p){})
^
/tmp/test/test/Matrix.h:22:51: note: to match this '('
, _array(NULL, [](T[]* p){})
^
1 error generated.
std::unique_ptr<T[], Deleter>
, гдеDeleter
— это тип функции (или объекта), выполняющей удаление. Затем конструкцияunique_ptr
должна передать второй аргумент этого типа. - person Peter   schedule 27.09.2019