首先,我真的不知道如何在这个问题上加上标题。 所以我们有这个代码:
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
指向的东西,为什么参数的值不仅仅被复制而不是引用未命名的实体/字符串文字?这是最佳的吗?
答案 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;}
};