大 3 - 赋值运算符
Big 3 - Assignment operator
本文关键字:赋值运算符 更新时间:2023-10-16
我正在开发一个二十一点游戏。在我的二十一点游戏中,我创建了一个名为Dealer的类。我在类中添加了"Big 3",因为我正在使用堆上的资源。在我的 int main() 中,我创建了两个 Dealer 类型的指针并将其设置为彼此;但是,由于某种原因,当我运行调试器时,它不会转到我在 Dealer 类中创建的分配运算符。谁能教育我为什么它不转到在经销商类中创建的分配运算符?为什么赋值运算符仅适用于 Dealer 类型的非指针变量?
class Dealer
{
public:
Dealer();
Dealer(Deck*);
Dealer& operator=(const Dealer&); // assign operator
Dealer(const Dealer&); //copy constructor
~Dealer();//deconstructor
private:
vector<Card*> myCards;
Deck *deckOfCards;
};
Dealer::Dealer()
{
deckOfCards = new Deck();
}
Dealer::Dealer(Deck *t)
{
deckOfCards = t;
}
//copy constructor
Dealer::Dealer(const Dealer& rightSide)
{
deckOfCards = new Deck();
for (size_t x= 0; rightSide.myCards.size(); x++)
{
myCards[x] = rightSide.myCards[x];//copying of the vector
}
}
//Assignment Operator
Dealer& Dealer::operator=(const Dealer& rhs)
{
if(this != &rhs)
{
delete deckOfCards;
for(size_t x = 0; x < myCards.size(); x++)
{
delete [] myCards[x];
}
myCards.clear();
deckOfCards = rhs.deckOfCards; //copy for Deck *deckOfCards
for (size_t x= 0; rhs.myCards.size(); x++)
{
myCards[x] = rhs.myCards[x];//copying of the vector
}
}
return *this;
}
//Destructor
Dealer::~Dealer()
{
delete deckOfCards;
for(size_t x = 0; x < myCards.size(); x++)
{
delete [] myCards[x];
}
myCards.clear();
}
int main()
{
Deck* p = new Deck();
Deck *b = new Deck();
p->shuffle();
p->Display();
b = p; //does not apply the assign operator
b->Display();
b->shuffle();
b->Display();
// Deck f;
// Deck g;
// f.shuffle();
// g = f; // This goes to the assignment operator function
// f.Display();
// g.shuffle();
// g.Display();
}
因为赋值方法用于复制(在这个词的松散意义上,从技术上讲,它可能应该是"赋值")一个对象,而不是用于复制指向对象的普通指针。
根据定义,当你复制一个指针时,你希望它指向完全相同的东西,否则它实际上不是副本。因此,您得到的只是对象地址的副本,无需为此调用任何成员函数。
相关文章:
- 重载Singly Linked List中的赋值运算符
- 使用赋值运算符重载从类中返回jobject
- 标准库类型的赋值运算符的引用限定符
- 复制构造函数、赋值运算符C++
- 标准::变体的赋值运算符
- 移动赋值运算符;尝试引用已删除的函数.我该如何解决这个问题?
- 基类和派生类的多态赋值运算符
- 为用户定义的类正确调用复制构造函数/赋值运算符
- CRTP 中的复制赋值运算符 - gcc vs clang 和 msvc
- 为什么初始化时没有调用重载赋值运算符?
- 赋值运算符重载和自赋值
- C++矢量复制构造函数和赋值运算符是否也复制保留空间?
- Qt PL/SQL - 赋值运算符 - 字符串缓冲区太小
- 对 r 值使用移动赋值运算符时的异常
- 由于没有使用赋值运算符,映射的值是如何初始化的?
- 默认赋值运算符如何在实际 STL 中实现
- 使用赋值运算符复制 std::vector
- C++ 通过自定义赋值运算符隐式转换函数参数
- 赋值运算符的奇怪行为
- C++赋值运算符,我们可以用 copy 替换它吗?