gpt4 book ai didi

c++ - 默认赋值运算符如何与字符串指针一起使用

转载 作者:行者123 更新时间:2023-12-02 09:52:11 24 4
gpt4 key购买 nike

代码在运行期间是否应该失败? Visual Studio可以成功执行它

#include<iostream>
#include <string>
using namespace std;

class Boy
{
string* _name;
public:
Boy(string n) :_name(new string(n)) {}
string getName() const { return *_name; }
};
int main() {
Boy t("Tom");
string str = "Tom2";
t = str;
cout << t.getName();
return 0;
}

最佳答案

Should the code fail during runtime?


不,不应该。
我们来剖析一下下面的代码行:
t = str;
有一个隐式构造的临时 Boy实例。因此,它与
t = Boy(str);
operator=将在构造函数中生成的指针复制到 t._name
临时创建的 Boy实例消失了,而没有删除内部管理的指针(应该如此)。
因此,您的代码可以正常运行而不会出现故障或未定义的行为(但会泄漏内存)。

综上所述,您真正应该做的是以下类声明:
class Boy {
std::string name;
public:
Boy(const std::string& n) : name(n) {}
const std::string& getName() const { return name; }
};
不必再担心指针,内存管理以及所有这些东西,YAGNI。 std::string和c++标准库提供的其他容器类旨在以高效,安全且不易出错的方式为您完成所有这些工作。

关于c++ - 默认赋值运算符如何与字符串指针一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63763304/

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