Вот мой код.Как получить доступ к содержимому std :: shared_ptr?
std::shared_ptr<WSUStudent> WSUStudent::registerStudent(
std::string lastName,
std::string firstName
)
{
auto result = std::shared_ptr<WSUStudent>(new WSUStudent(lastName, firstName));
s_allStudents.insert(&result);
return result;
}
Мне удалось изменить функцию, чтобы она возвращала shared_ptr вместо обычного указателя. Я успешно инкапсулировал «новый» оператор с общим указателем в соответствии с назначением (я думаю), но строка кода ниже «auto» не работала без &, и она не работает с &. Я получаю сообщение об ошибке, что нет соответствующего вызова функции, с или без &. Эта строка кода пытается вставить нового ученика (или указателя на нового ученика?) В список всех учеников. Однако метод «insert» не локально переопределен, поэтому я не совсем уверен, что делать здесь. Ошибка печати ниже.
/mnt/hgfs/Data Structures and Algorithms/HW04/WSUStudent.cpp:146:32: error: no matching function for call to ‘std::set<WSUStudent*>::insert(std::shared_ptr<WSUStudent>*)’
s_allStudents.insert(&result);
Суть этого задания является исправление утечек памяти («новые» заявления, которые не удаляются с их указателями), поворачивая обычные указатели на слабые указатели и общие указатели. Исходный код выглядит следующим образом.
WSUStudent *WSUStudent::registerStudent(
std::string lastName,
std::string firstName
)
{
auto result = new WSUStudent(lastName, firstName);
s_allStudents.insert(result);
return result;
}
Я собираюсь сделать это неправильно? Я не могу запустить строку s_allStudents.
какого типа 's_allStudents'? –
Объявление для s_allStudents является статическим std :: set s_allStudents; Я собираюсь попробовать изменить WSUStudent * в скобках на shared_ptr, пока я жду. –
user3424549
's_allStudents.insert (& result);' нехорошо. Вы храните указатель на объект в стеке. –