如何从原始字符数组文字传递std :: string参数?

时间:2017-05-21 19:49:25

标签: c++

首先,我真的不知道如何在这个问题上加上标题。 所以我们有这个代码:

class Example5 {
    string* ptr;
  public:
    Example5 (const string& str) : ptr(new string(str)) {}
    ~Example5 () {delete ptr;}
    // access content:
    const string& content() const {return *ptr;}
};

int main () {
  Example5 foo ("Example");

  cout << "bar's content: " << foo.content() << '\n';
  return 0;
}

因此class Example5的构造函数正在将指针ptr初始化为指向str的指针,对吧?

const string& str作为参数而不是string str是一种最佳方式吗?我的意思是因为str被用作ptr指向的东西,为什么参数的值不仅仅被复制而不是引用未命名的实体/字符串文字?这是最佳的吗?

1 个答案:

答案 0 :(得分:2)

  

因此class Example5的构造函数正在将指针ptr初始化为指向str的指针,对吧?

没有!它会创建一个新的std::string实例,并复制参数中传递的内容。

  

为什么参数的值不仅仅被复制而不是引用未命名的实体/字符串文字?

好问题,是的。

  

这是最佳的吗?

没有

通常的方法是根本不使用指针:

class Example5 {
    string s;
  public:
    Example5 (const string& str) : s(str) {}
    // access content:
    const string& content() const {return s;}
};

为了避免复制(如果您真正关心的话),您也可以写

class Example5 {
    string s;
  public:
    Example5 (string str) : s(std::move(str)) {}
    // access content:
    const string& content() const {return s;}
};