Раньше я пробовал что-то похожее на это.
template<typename T>
struct freeArrFunctor
{
void operator()(T* arr)
{
free(arr);
arr = NULL;
}
};
template<typename T>
using unique_array_ptr = std::unique_ptr<T, freeArrFunctor<T>>;
template<typename T>
inline unique_array_ptr<T> make_unique_array_ptr (const size_t Nbyte)
{
return unique_array_ptr<T>(static_cast<T*>(malloc(Nbyte)));
}
Сначала вы должны объявить, как будет работать ваш собственный удалитель (здесь я использовал функцию c 'free ()').и используется как пользовательское средство удаления уникального указателя.
Вы можете взглянуть на эту тему , где есть много хороших примеров пользовательского использования уникального указателя.
Таким образом, на основе приведенного выше примера вы можете создать производный умный указатель, например:
cross_unique_ptr<T>
, где вы сможете определить свою собственную функцию make (если хотите, иначе создайте непосредственно указатель), а также определите cross_deleter_functor
для предоставления этому новому интеллектуальному указателю.