//OK, pointer to int 999
std::shared_ptr<int> sp(new int(999));
template< typename T >
struct array_deleter
{
void operator ()( T const * p)
{
delete[] p;
}
};
// pointer to int array,
// (1) provide array deleter
std::shared_ptr<int> sp(new int[10], array_deleter<int>());
// (2) or lambda expression
std::shared_ptr<int> sp(new int[10], [](int *p) { delete[] p; });
// (3) or use default_delete
std::shared_ptr<int> sp(new int[10], std::default_delete<int[]>());
// (4) or we can use unique_ptr
std::unique_ptr<int[]> up(new int[10]); // this will correctly call delete[]