没有从'string *'(又名"basic_string<char> *")到"shared_ptr"的<string>可行转换

no viable conversion from 'string *' (aka 'basic_string<char> *') to 'shared_ptr<string>

本文关键字:string gt lt 转换 shared ptr basic 又名 char      更新时间:2023-10-16

所以我有这个代码:

#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");