Я изо всех сил, чтобы превратить этот кусок кода в однострочника:Pass Rvalue по ссылке
std::string filename = "cats";
std::shared_ptr<bmd2::Bmd2Dataset> ptr (new bmd2::Bmd2Dataset(filename, bmd2::File::FM_WRITE));
bmd2::bmd2Session::getInstance().addDataset(ptr);
выше прекрасно работает - но я могу назвать addDataset без создания lvalues (строки 1 + 2) ?
Вот декларация addDataset():
int addDataset(std::shared_ptr<bmd2::Bmd2Dataset> &) throw (bmd2Exception);
Интересно. В целях обучения вы можете сказать мне, можете ли вы выполнить это без вызова функции make_shared()? –
Я пробовал ваш пример, и компилятор дает ошибку, что функция addDataset() не вызывается с правильными аргументами: Недопустимые аргументы: int addDataset (std :: shared_ptr &) ' , С другой стороны, мой код не вызывает эту ошибку. Я обновил свой вопрос, чтобы показать вам объявление функции addDataset(). –
Это был такой отличный ответ. Спасибо большое. Благослови твою душу: D –