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

标签 c++ stack overloading variable-assignment operator-keyword

我正在尝试为我的 Stack 类(在 C++ 中)重载赋值运算符。当我运行我的输出时,我得到以下信息:

0 1 2 3 4 5 6 7 (空的) 释放内存! 释放内存!

第一行代表栈a,第二行代表栈b(见main())和“释放内存!”是析构函数。无论出于何种原因,堆栈 a 的内容都没有复制到堆栈 b 的内容中。我已经验证了容量空间在那里(做了一堆打印语句)但是复制没有发生。有人可以帮忙吗?

这是我的 Stack 构造函数、复制构造函数和析构函数:

/********************************/
Stack::Stack()
{
    top = -1; // array counter starts at 0
    stk = new int[MAXSIZE];
    capacity = MAXSIZE;
}
/********************************/

/********copy constructor ***********/
Stack::Stack(const Stack& source) {
  stk = new int[source.capacity]; // allocates new array space for the copy constructor
   for (int i = 0; i <= top; i++) {
      stk[i] = source.stk[i];
    }
    top = source.top;
    capacity = source.capacity;
} /******* end copy constructor *******/

Stack::~Stack() {
    cout << "Freeing memory!" << endl;
    delete[] stk;
}


Here is my main:


int main() {

    Stack a;
    for (int i=0; i < 8; i++) {
        a.push(i);
    }
    //cout << "\n Using copying incorrectly...\n";
    //Stack b(a);
    Stack b;
    b = a;
    a.display();
    b.display();

最佳答案

b=a 正在调用赋值运算符,而不是复制构造函数。您提供的代码示例不包含赋值运算符 operator=()。您的赋值运算符应包含与复制构造函数基本相同的逻辑,因此您最好将该逻辑移至新函数并让复制构造函数和赋值运算符都调用此新函数。

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

相关文章:

c++ - 从函数返回 shared_ptr 的取消引用值

c++ - boost program options 一个选项的多个值

c++ - 查找 vector 中的值索引位置

c++ - cocos2dx : Issue when returning multiple numberOfCellsInTableView in CCTableViwe?

java - 在堆栈数据结构上存储新元素时,.next 如何工作? [Java]

c - Stack ADT实现中难以理解的表达

c++ - 有没有办法在提供左值和右值重载的同时删除重复代码?

java - 方法重载和泛型

c++ - 如何使用主参数添加更多堆栈?

c++ - 运算符重载矩阵 C++ ** 无代理 **