Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 派生类的复制赋值运算符_C++ - Fatal编程技术网

C++ 派生类的复制赋值运算符

C++ 派生类的复制赋值运算符,c++,C++,我有一个从a派生的类B。a实现了复制构造函数和赋值运算符。我有B的复制构造函数,想为B实现赋值。我的方法(很可能不正确)是 B&B::operator=(常量B&other){ B tmp(其他); 标准:交换(*本,tmp); std::swap(m_成员,其他.m_成员); } 像这样的东西行吗?我在网上查找了std::swap到基类的专门化,但没有找到有用的东西。您可以检查这个stackoverflow线程(),了解如何从基类使用operator=from 我不明白的是你为什么要用swa

我有一个从a派生的类B。a实现了复制构造函数和赋值运算符。我有B的复制构造函数,想为B实现赋值。我的方法(很可能不正确)是

B&B::operator=(常量B&other){
B tmp(其他);
标准:交换(*本,tmp);
std::swap(m_成员,其他.m_成员);
}

像这样的东西行吗?我在网上查找了std::swap到基类的专门化,但没有找到有用的东西。

您可以检查这个stackoverflow线程(),了解如何从基类使用operator=from

我不明白的是你为什么要用swap。相反,您应该这样做:

B& B::operator=(const B& other) {
    A::operator = (other);
    this->m_member = other.m_member;
    return *this;
}

请让你的标题描述问题,而不仅仅是列出技术。它仍然只是命名一件事,而不是询问或描述一个问题。M_成员可以动态分配。我使用复制构造函数分配新内存,然后我试图只交换TMP的析构函数正确释放内存。如果使用C++ 11,尝试使用STD::UnQuyQPTR或STD::SyrdY-PTR。查看包含unique and shared_ptr视频的此页面:另一个解决方案是创建一个私有/受保护的方法来动态分配内存,并从构造函数和操作员调用它=
B& B::operator=(const B& other) {
    A::operator = (other);
    this->m_member = other.m_member;
    return *this;
}