Функция-член Boost 1.48 shared_ptr как пользовательский диллокатор, как в этом случае следует использовать boost bind? - PullRequest
0 голосов
/ 26 января 2012

Я хочу выучить нестандартные деллокаторы в общих указателях boost.

Я включил:

#include <string>
#include <boost/shared_ptr.hpp>
#include <boost/bind.hpp>

создал простой интерфейс:

class deleter
{
    public:
    void delete_ptr(void * ptr)
    {
        delete ptr;
    };
};

class plugin: public deleter
{
public:
    virtual boost::shared_ptr<std::string> pass_and_modify_data( boost::shared_ptr<std::string>  a) =0;
};

И простой класс

#include "plug_in_interface.h"

class my_plugin: public plugin
{
    public:
    virtual boost::shared_ptr<std::string> pass_and_modify_data( boost::shared_ptr<std::string>  a)
        {
            return boost::shared_ptr<std::string>(new std::string,   boost::bind( &my_plugin::delete_ptr, _1 )  );
        }
};

Но он не хочетскомпилировать в библиотеку со следующими ошибками компилятора:

Error   7   error C2440: 'newline' : cannot convert from 'std::string *' to 'deleter *' c:\program files (x86)\boost\include\boost-1_48\boost\bind\mem_fn.hpp   333 1   DemoPlugin
Error   8   error C2647: '->*' : cannot dereference a 'void (__thiscall deleter::* const )' on a 'std::string *'    c:\program files (x86)\boost\include\boost-1_48\boost\bind\mem_fn.hpp   333 1   DemoPlugin

Что мне делать?Как изменить способ создания общего ресурса с помощью обычного удаления boost::shared_ptr<std::string>(new std::string, boost::bind( &my_plugin::delete_ptr, _1 ) );?Что не так с моей связью?

...