Я пытаюсь сделать что-то вроде этой работы:C++ 11 - способ обнаружения оператора новый []
struct holder {
std::function<void()> destroyer;
template<typename T>
holder(T) = delete;
template<typename T>
holder(std::enable_if< WAS CREATED WITH new > pointer) {
destroyer = [=] { delete pointer; };
};
template<typename T>
holder(std::enable_if< WAS CREATED WITH new[] > array) {
destroyer = [=] { delete[] array; };
};
virtual ~holder() {
destroyer();
};
};
так, что я мог бы просто сделать return new test;
и return = new test[10];
на функции, вернется holder
. Но я выяснил, что он никогда не будет рассматриваться как массив, так как operator new[]
возвращает указатель.
Есть ли способ достичь желаемого результата?
Спасибо! :)
Вы пытаетесь изобрести ['unique_ptr'] (http://en.cppreference.com/w/cpp/memory/unique_ptr)? 'unique_ptr p (new int);' будет вызывать 'delete', когда' p' выходит за рамки. Аналогично, 'unique_ptr p (new int [10]);' будет вызывать 'delete []'. –
Praetorian
Kinda, но с неявным признаком '<тип шаблона>'. – paulotorrens