gpt4 book ai didi

c++ - 如何将字符串保存到 C++ 中类的 string* 成员?

转载 作者:行者123 更新时间:2023-12-01 14:05:25 28 4
gpt4 key购买 nike

我有一个 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 字符串的地址,因为它应该)。我该怎么做?

我尝试创建一个以字符串指针作为参数的构造函数,但它也没有正常工作,我认为出于类似的原因。

编辑:阅读评论后,我决定更改构造函数,因此它现在采用 std::string* 作为参数,并从那里开始工作。

最佳答案

您可以按如下方式编写构造函数:

foo::foo(std::string s)
{
bar = new std::string(s); // code
}

但是现在你有内存泄漏,所以你需要一个析构函数:

foo::~foo() { delete bar; }

然后您需要实现或禁用复制/分配。

class foo final
{
...
foo(const foo&) = delete;
foo& operator=(const foo&) = delete;
...
};

存储指向 std::string 的指针而不是实例需要付出很多努力:

class foo final
{
std::string bar; // NOT std::string* bar
public:
foo(std::string s) : bar(s) {}
};

如果你真的想要一个指针,使用 std::unique_ptrstd::shared_ptr 会更好

class foo final
{
std::unique_ptr<std::string> bar;
public:
foo(std::string s) : bar(std::make_unique<std::string>(s)) {}
};

std::unique_ptr 无法复制/赋值,因此您甚至不必为 foo 禁用复制/赋值,尽管您可能想要更好的错误消息。

关于c++ - 如何将字符串保存到 C++ 中类的 string* 成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60780654/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com