shared_ptr: неск. недопониманий. просвятите:)
От: varnie  
Дата: 07.07.08 11:57
Оценка:
здравствуйте все.

с недавних пор начал изучать boost::shared_ptr, но в голове есть нек. недопонимания. хотел бы здесь найти ответы на свои простые вопросы касамего него.
пускай имеется:
class Data{
    int _i;
public:
    //...
    void bar(){
      _i = 5;
    }
};

typedef boost::shared_ptr< Data > DataPtr;
typedef std::vector< DataPtr > DataPtrVector;

//где-то выше:
DataPtrVector _v;

//затем в одной из ф-ций:
void foo(){
    DataPtr d(new Data);
    _v.push_back(d);
    //...
    _v.back()->bar(); //(1)
    //d->bar() //(2)
}


А)
можно ли заменить строку (1) на строку (2), при условии, что нам необходимо чтобы метод foo() был вызван именно у того объекта, который был помещён в вектор _v? насколько я разобралса, в данном примере заменить строку (1) на (2) нельзя при условии вышеописанного требования, т.к. в обратном случае метод foo() вызовется у "внешнего" DataPtr (читай, у совсем другого объекта Data, через другой указатель нежели тот что лежит в векторе).

Б)
есть ли возможность создать вектор ссылок на объекты boost::shared_ptr ?
что-то типа
typedef std::vector< CFunctionPtr &> CFunctionsPtrRefVector;
CFunctionsPtrRefVector _v;

если подобное возможно, то прав ли я в том, что нельзя заполнить вектор _v ссылками на автоматические объекты, созданные в блоке какой-нибудь ф-ции, т.к. по выходу из неё эти объекты будут разрушены, и, следовательно, ссылки, лежащие в векторе _v будут уже содержать мусор?

ткните, прав ли я в своих теоретизированиях, и если нет, то что я недопонимаю? благодарю.
"Я женился на первой же женщине, которая обратилась ко мне по мейлу." © Л. Торвальдс
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.