【发布时间】:2020-03-20 19:41:28
【问题描述】:
我有一个 C++ 类,它的成员中包含 std::string*。我想为这个类创建一个构造函数,它以std::string 作为参数并使字符串指针指向它:
class foo
{
private:
std::string * bar;
public:
foo(std::string);
}
foo::foo(std::string s)
{
//code
}
如果我这样做 this->bar = &s; 它显然不起作用(保存 s 字符串的地址,因为它应该)。我该怎么做?
我尝试创建一个以字符串指针作为参数的构造函数,但它也无法正常工作,我假设出于类似的原因。
编辑:在阅读 cmets 后,我决定更改构造函数,因此它现在将 std::string* 作为其参数,并从那里开始工作。
【问题讨论】:
-
为什么它包含
std::string*?这是非常不寻常的。你不能改变这个糟糕的设计吗? -
您需要创建一个指针并为其在构造函数中指向的对象赋值。话虽如此,您应该避免输入
std::string*并改用std::string。 -
然后将您的构造函数更改为:
foo::foo(std::string* s)尽管在这种情况下您可能希望使用 std::shared_ptr<:string> 和 std::weak_ptr<:string> -
体内不需要任何东西。只需使用成员明智的初始化:
foo::foo(std::string* s) : bar{s} {} -
出于同样的原因,类需要指向字符串(或引用)的指针,类的构造函数也需要指向字符串(或引用)的指针。没有一个论点不适用于另一个。
标签: c++ string pointers constructor