Передачаshared_ptr в функцию из другой функцииC++

Программы на C++. Форум разработчиков
Anonymous
 Передачаshared_ptr в функцию из другой функции

Сообщение Anonymous »

Я возвращаюсь к C++ спустя долгое время, унаследовав кодовую базу, часть которой имеет структуру следующего кода. У меня есть два объекта: Wrapped и Wrapper, и, как и следовало ожидать, Wrapper обертывает Wrapped. Существует два фабричных метода make_Wrapper и make_Wrapped, которые возвращают указатели на соответствующие объекты.
В следующем коде я заметил, что Case1, в котором Я используюshared_ptr не работает, тогда как Case2, в котором я использую обычный указатель C++, работает. Под «не работает» я имею в виду, что значение nz_=10 в обернутом заменяется мусором в Case1, тогда как в Case2 оно равно 10. Я могу проверить это, напечатав значение Wrapper.nz_ в main через external_wrapper->print().
Я думаю, это потому, что объект, на который указываетshared_ptr, удаляется после выхода из функции make_Wrapper. Я прав?
Как правильно передать объект черезshared_ptr из make_Wrapper в конструктор Wrapper?#include
#include
#include

// this is struct which is to be wrapped
struct Wrapped {
int nz_;
Wrapped(int nz):nz_(nz) {}
inline virtual void destroy() { delete this; };
};

// this is the wrapper
struct Wrapper {
Wrapper(Wrapped& wrapped):wrapped_(wrapped){}
Wrapped& wrapped_;

inline virtual void destroy() { delete this; };

void print() {
std::cout

Подробнее здесь: https://stackoverflow.com/questions/790 ... r-function

Вернуться в «C++»