здравствуйте все.
с недавних пор начал изучать 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 будут уже содержать мусор?
ткните, прав ли я в своих теоретизированиях, и если нет, то что я недопонимаю? благодарю.
"Я женился на первой же женщине, которая обратилась ко мне по мейлу." © Л. Торвальдс