我在努力把这种片的代码到一个班轮:通右值通过引用
std::string filename = "cats";
std::shared_ptr<bmd2::Bmd2Dataset> ptr (new bmd2::Bmd2Dataset(filename, bmd2::File::FM_WRITE));
bmd2::bmd2Session::getInstance().addDataset(ptr);
上述工作很大 - 但我可以调用addDataset而不创建左值(线1 + 2) ?
这里是addDataset()的声明:
int addDataset(std::shared_ptr<bmd2::Bmd2Dataset> &) throw (bmd2Exception);
有趣。为了学习的目的,你能告诉我,如果你没有make_shared()函数调用就可以完成这个任务吗? –
我试过你的例子,并且编译器给出了addDataset()函数没有用正确参数调用的错误: 无效参数'候选者是: int addDataset(std :: shared_ptr&)' 。另一方面,我的代码不会产生这个错误。我更新了我的问题,向您展示addDataset()函数的声明。 –
这是一个很好的答案。非常感谢。保佑你的灵魂:D –