c++ - 赋值运算符和复制构造函数有什么区别?

标签 c++ memory

我不明白 C++ 中赋值构造函数和复制构造函数之间的区别。是这样的:

class A {
public:
    A() {
        cout << "A::A()" << endl;
    }
};

// The copy constructor
A a = b;

// The assignment constructor
A c;
c = a;

// Is it right?

我想知道赋值构造函数和拷贝构造函数如何分配内存?

最佳答案

复制构造函数用于从其他对象的数据初始化以前未初始化的对象。

A(const A& rhs) : data_(rhs.data_) {}

例如:

A aa;
A a = aa;  //copy constructor

赋值运算符用于将先前初始化的对象的数据替换为其他对象的数据.

A& operator=(const A& rhs) {data_ = rhs.data_; return *this;}

例如:

A aa;
A a;
a = aa;  // assignment operator

您可以通过默认构造加赋值来替换复制构造,但这会降低效率。

(附带说明:我上面的实现正是编译器免费授予您的实现,因此手动实现它们没有多大意义。如果您有这两者之一,很可能您正在手动管理一些资源。在这种情况下,根据 The Rule of Three ,您很可能还需要另一个加上一个析构函数。)

关于c++ - 赋值运算符和复制构造函数有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11706040/

相关文章:

c++ - 结合使用 cin.getline 和 fgets 时防止缓冲区溢出

c++ - 我在解决简单的参数相关查找/模板类型推断问题时遇到问题

c++ - 在 C++11 中使用智能指针环绕旧的 C 结构并自动释放它们

c++ - 如何重新连接到不响应 close() 的服务器

C静态变量和linux fork

c++ - 为什么这段代码不能编译?

iphone - 使用仪器来查找代码中堆栈的溢出

c++ - 所有可写和可执行的程序内存段类型

python - 如何在不浪费内存的情况下重置树?

python - 可能的 Python Flask 内存泄漏