gpt4 book ai didi

c++ - C++中赋值运算符重载的目的

转载 作者:行者123 更新时间:2023-11-27 23:18:33 26 4
gpt4 key购买 nike

我试图理解在 C++ 中重载某些运算符的目的。
从概念上讲,赋值语句可以通过以下方式轻松实现:

  • 销毁旧对象,然后复制构造新对象
  • 复制新对象的构造,然后与旧对象交换,然后销毁旧对象

事实上, copy-and-swap 实现通常是在实际代码中实现赋值。

那么,为什么 C++ 允许程序员重载赋值运算符,而不是仅仅执行上述操作?

是否打算允许分配比销毁 + 构造更快的场景?
如果是这样,那是什么时候发生的?如果不是,那么它打算支持什么用例?

最佳答案

1)引用计数

假设您有一个被引用计数的资源,并且它被包装在对象中。

void operator=(const MyObject& v) {
this->resource = refCount(v->resource);
}

// Here the internal resource will be copied and not the objects.
MyObject A = B;

2) 或者您只想复制没有花哨语义的字段。

void operator=(const MyObject& v) {
this->someField = v->someField;
}

// So this statement should generate just one function call and not a fancy
// collection of temporaries that require construction destruction.
MyObject A = B;

在这两种情况下,代码运行得都快得多。在第二种情况下,效果是相似的。

3) 还有类型...使用运算符处理将其他类型分配给您的类型。

void operator=(const MyObject& v) {
this->someField = v->someField;
}
void operator=(int x) {
this->value = x;
}
void operator=(float y) {
this->floatValue = y;
}

关于c++ - C++中赋值运算符重载的目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14900545/

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