shared_ptr z deleterem i error C2064: term does not evaluate to a function taking 2 arguments

0

Cześć,

Czy może mi ktoś podpowiedzieć gdzie robię błąd? Chcę mieć coś takiego

std::shared_ptr<int> sp( new char[10], std::default_delete<char[]>( ) );

Ale kompilator tego nie łyka. Próbowałem też tak

        std::shared_ptr<char> sp( new char[10], []( char *p ) { delete[] p; } );

i tak

template< typename T >
    struct array_deleter
    {
        void operator ()( T const * p )
        {
            delete[] p;
        }
    };

        std::shared_ptr<char> sp( new char[10], array_deleter<char>( ) );

W każdym przypadku dostaję w twarz takim błędem

error C2064: term does not evaluate to a function taking 2 arguments
1>          class does not define an 'operator()' or a user defined conversion operator to a pointer-to-function or reference-to-function that takes appropriate number of arguments        

nie wiem czemu. Przecież w każdym przypadku jest operator() przyjmujący wskaźnik na char.

Z góry dzięki za pomoc (:

1

Zły typ podałeś.

std::shared_ptr<char> sp( new char[10], std::default_delete<char[]>( ) );
0

Masz rację, ale to przez kopiowanie z przykładów. W kodzie mam tak jak ty podałeś i też to samo

0

Chcę mieć coś takiego
std::shared_ptr<int> sp( new char[10], std::default_delete<char[]>( ) );

std::array<int,10> sp;
0

Dziękuje za odpowiedzi.

Miałem ten problem ponieważ chciałem obejść problem z tego http://4programmers.net/Forum/C_i_C++/255677-move_konstruktor tematu. Nie chciałem używać unique_ptr bo tak jak napisałem w tamtym temacie VS nie puszczał std::move(). Dziś sprawdzę jak jest na VS 2015, pewnie problem zniknie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1