c++ - 如果 operator= 函数未在 C++ 类中实现,执行将如何工作

标签 c++

我正在实现一项新功能。

我有一个带有 bool 变量的简单类。 我没有在其中实现 operator= 函数。 不过,当我使用 operator = 复制对象时,正在复制值。

您能解释一下它是如何工作的吗? 不编写此函数有多安全,因为在我的应用程序中,很多时候,我将使用运算符 '=' 复制这些对象

#include <iostream>
using namespace std;
class A
{
    public:
    bool abc;
    bool xyz;
};
int main()
{
  A obj1, obj2;
  obj1.abc = true;
  obj1.xyz = false;

  obj2 = obj1;

  cout<<"obj2 abc: "<<obj2.abc<<endl; //How do the values got copied?
  cout<<"obj2 xyz: "<<obj2.xyz<<endl;

}

最佳答案

如果您的类(class)不管理资源,那是安全的。默认的 operator = 执行成员复制。这是一个浅拷贝,因此所有具有可用的可访问 operator = 的成员都将被正确复制。

如果类正在管理资源(动态内存、流、句柄等),默认值是不安全的 - 参见 the rule of three .

关于c++ - 如果 operator= 函数未在 C++ 类中实现,执行将如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14398953/

相关文章:

c++ - Valgrind 将此检测为可能的内存泄漏

c++ - 如果我在 for 中声明一个对象,它的内存会在 for 之后被释放吗?

变量周围的 C++ 堆栈已损坏

c++ - 在 VC++ 2008 中嵌入/加载 DLL 作为资源?

c++ - 如何调用处理程序?

c++ - VC 2010 可执行文件未在其他计算机上运行 - 没有错误

c++ - boost::program_options :如何添加程序描述文本

c++ - Qt+OpenCV : Symbols not found for architecture x86_64

c++ - shared_ptr<void> 如何知道使用哪个析构函数?

c++ - WaitForInputIdle 不适用于以编程方式启动 mspaint