shared_ptr & any
От: Аноним  
Дата: 28.04.11 06:58
Оценка:
Как выкрутиться? как сделать так что бы отработал деструктор.


class a1
{
public:
    a1(){std::cout << "create object =" << this <<std::endl;};
    ~a1(){std::cout << "destroy object =" << this <<std::endl;};
    void test(){std::cout << "test bject =" << this <<std::endl;};
};


void test1(std::vector<boost::shared_ptr<boost::any>>* pV)
{
    boost::shared_ptr<boost::any> ss;

    for (int i=1; i<=2; i++) 
    {

        ss.reset(new boost::any(new a1()));
        pV->push_back(ss);
    }
}

int _tmain(int argc, _TCHAR* argv[])
{

    std::vector<boost::shared_ptr<boost::any>> v1;

    test1(&v1);


    v1.pop_back();
    return 0;
}
Re: shared_ptr & any
От: nen777w  
Дата: 28.04.11 07:06
Оценка: 1 (1)
Здравствуйте, Аноним, Вы писали:
А>Как выкрутиться? как сделать так что бы отработал деструктор.

shared_ptr — может быть создан с вашим deleter-ом. смотрите документацию.
Re[2]: shared_ptr & any
От: Аноним  
Дата: 28.04.11 07:28
Оценка:
Здравствуйте, nen777w, Вы писали:

N>Здравствуйте, Аноним, Вы писали:

А>>Как выкрутиться? как сделать так что бы отработал деструктор.

N>shared_ptr — может быть создан с вашим deleter-ом. смотрите документацию.


все равно не отрабатывает

void deleter( boost::any* ptr)
{

    a1* aa1 = boost::any_cast<a1>(ptr);

    delete aa1;
    delete ptr;
}

void test1(std::vector<boost::shared_ptr<boost::any>>* pV)
{
    boost::shared_ptr<boost::any> ss;

    for (int i=1; i<=2; i++) 
    {
        ss.reset(new boost::any(new a1()), deleter);
        pV->push_back(ss);
    }
}
Re[3]: shared_ptr & any
От: nen777w  
Дата: 28.04.11 08:05
Оценка:
a1* aa1 = boost::any_cast<a1*>(*ptr);
Re[4]: shared_ptr & any
От: Аноним  
Дата: 28.04.11 08:10
Оценка:
Здравствуйте, nen777w, Вы писали:

N>
N>a1* aa1 = boost::any_cast<a1*>(*ptr);
N>


Спасибо!
Re[2]: shared_ptr & any
От: uzhas Ниоткуда  
Дата: 28.04.11 11:51
Оценка:
Здравствуйте, nen777w, Вы писали:

N>shared_ptr — может быть создан с вашим deleter-ом. смотрите документацию.

а еще я бы рекомендовал класть shared_ptr<a1> в any
vector<any> вроде можно создавать
Re[3]: shared_ptr & any
От: uzhas Ниоткуда  
Дата: 28.04.11 11:55
Оценка:
Здравствуйте, uzhas, Вы писали:

пример: http://ideone.com/R9diS
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.