Как я вижу, void
, о котором вы упомянули в вопросе Q, является опечаткой, поскольку вызов по удалению на void *
гарантирует стандартное неопределенное поведение.
Для другого типа данных,
Вам нужно будет указать свой deletor
для shared_ptr
, чтобы вы могли звонить delete []
.
Например:
Например:
template<typename T>
struct Customdeleter
{
void operator()(T* p)
{
delete [] p;
}
};
И вызывать как:
shared_ptr<char> sp(new char[num], Customdeleter<char>());
EDIT:
Поскольку вы пояснили, что в комментариях используется Boost, а не TR1 (AFAIK TR1 не имеет shared_array)
Вы можете использовать shared_array
:
shared_array<char> sp(new char[num])