首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有赋值算子的类的C++深拷贝

带有赋值算子的类的C++深拷贝
EN

Stack Overflow用户
提问于 2013-12-07 21:19:55
回答 1查看 2.4K关注 0票数 0

如果我有一个重载的赋值操作符需要深入复制一个类,我将如何去做呢?类Person包含一个名称类。

代码语言:javascript
复制
Person& Person::operator=(Person& per){
if (this==&per){return *this;}
// my attempt at making a deep-copy but it crashes  
this->name = *new Name(per.name);
}

在名称类复制构造函数和赋值操作符中。

代码语言:javascript
复制
Name::Name(Name& name){

if(name.firstName){
firstName = new char [strlen(name.firstName)+1];
strcpy(firstName,name.firstName);
}

Name& Name::operator=(Name& newName){
if(this==&newName){return *this;}

if(newName.firstName){
firstName = new char [strlen(newName.firstName)+1];
strcpy(firstName,newName.firstName);

return *this;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-07 21:42:11

我将利用现有的复制构造函数、析构函数和添加的swap()函数:

代码语言:javascript
复制
Name& Name::operator= (Name other) {
    this->swap(other);
    return *this;
}

我正在实现的所有复制任务都类似于这个实现。缺少的swap()函数编写起来也很简单:

代码语言:javascript
复制
void Name::swap(Name& other) {
    std::swap(this->firstName, other.firstName);
}

Person也是如此。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20446784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档