没有从 'string *'(又名 'basic_string<char> *')到 'shared_ptr<string> 的可行转换
no viable conversion from 'string *' (aka 'basic_string<char> *') to 'shared_ptr<string>
所以我有这个代码:
#include <iostream>
#include <list>
#include <string>
#include <memory>
using namespace std;
int main() {
{
shared_ptr<string> str = new string("Marius");
cout << str + " MMG";
}
return 0;
}
通过编译:
clang++ -Wall -g -std=c++14 test.c++ -o test
我得到:
test.c++:11:22: error: no viable conversion from 'string *' (aka 'basic_string<char> *') to 'shared_ptr<string>'
shared_ptr<string> str = new string("Marius");
错在哪里?
使用 GCC 我得到同样的错误。
采用原始指针的 std::shared_ptr
的构造函数是 explicit
。
另请注意,没有 operator=
采用原始指针,因此以下 也 无法编译:
std::shared_ptr<std::string> ptr;
ptr = new std::string{"Marius"};
要正确构建一个,有两种选择:
std::shared_ptr<std::string> ptr{new std::string{"Marius"}};
// or the (much) preferred
auto ptr = std::make_shared<std::string>("Marius");
所以我有这个代码:
#include <iostream>
#include <list>
#include <string>
#include <memory>
using namespace std;
int main() {
{
shared_ptr<string> str = new string("Marius");
cout << str + " MMG";
}
return 0;
}
通过编译:
clang++ -Wall -g -std=c++14 test.c++ -o test
我得到:
test.c++:11:22: error: no viable conversion from 'string *' (aka 'basic_string<char> *') to 'shared_ptr<string>'
shared_ptr<string> str = new string("Marius");
错在哪里? 使用 GCC 我得到同样的错误。
采用原始指针的 std::shared_ptr
的构造函数是 explicit
。
另请注意,没有 operator=
采用原始指针,因此以下 也 无法编译:
std::shared_ptr<std::string> ptr;
ptr = new std::string{"Marius"};
要正确构建一个,有两种选择:
std::shared_ptr<std::string> ptr{new std::string{"Marius"}};
// or the (much) preferred
auto ptr = std::make_shared<std::string>("Marius");