我习惯于在返回 std::unique_ptr
时不使用 std::move
,因为这会禁用 RVO。但是,我有一个局部的 std::unique_ptr
,但返回类型是 std::shared_ptr
。
以下是代码示例:
shared_ptr<int> getInt1() {
auto i = make_unique<int>();
*i = 1;
return i;
}
shared_ptr<int> getInt2() {
return make_unique<int>(2);
}
unique_ptr<int> getInt3() {
auto ptr = make_unique<int>(2);
return ptr;
}
int main() {
cout << *getInt1() << endl << *getInt2() << *getInt3() << endl;
return 0;
}
GCC对大小写不敏感,但Clang会拒绝getInt1()
,并显示以下错误:
main.cpp:10:13: error: no viable conversion from 'std::unique_ptr<int, std::default_delete<int> >' to 'shared_ptr<int>'
return i;
^
两个编译器都能接受第三种情况。
哪一个是错误的?谢谢。