gpt4 book ai didi

c++ - 复制构造函数和重载赋值?

转载 作者:行者123 更新时间:2023-11-30 02:39:20 26 4
gpt4 key购买 nike

任何人都可以在下面提到的代码中向我解释赋值运算符。我有

问题 1:为什么赋值运算符返回引用对象 [我知道这用于类似这样的事情 c1 = c2 = c3,但这是如何工作的]

任务 2:我创建了动态指针 tempName 但我没有释放内存,因此存在内存泄漏。我该如何解决。或者如果你有的话给我举个例子。

任务 3:我已经在名称中分配了 tempName,所以如果我删除 tempName,名称将指向 tempName > 在返回之前,会发生什么。

Contact& operator=( const Contact& rhs ) {
char* tempName = new char[ strlen( rhs. name ) + 1] ;
delete[ ] name;
name = tempName;
strcpy( name, rhs. name ) ;
age = rhs. age;
return *this;
}

最佳答案

Q1.

当您返回一个对象的引用时,您就可以将它放在赋值的左侧以分配另一个值。所以,我认为有两个原因。

(1) 避免不必要的复制。

(2) C++中赋值的默认行为,你可以做到

a = (b = c)

(a = b) = c

即使返回值,第一种形式也可以。 但是对于第二个,您必须返回对值的引用才能具有与正常 C++ 赋值相同的行为。

Q2.

是的,它有内存泄漏。除非,你在析构函数中删除了 name

Q3.

nametempName 指向同一个地址。因此,删除 tempName 将删除 name 指向的内容。不要这样做。

此外,使用 C++,为什么不使用 std::string 而不是 C 风格的字符串并让 std::string 管理其内存。


当然你可以不遵守 C++ 的方式,对操作符有你自己的行为。但不推荐。

关于c++ - 复制构造函数和重载赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29888372/

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