c++ - 如何在 Vector 类中创建 operator=?

标签 c++ compiler-errors operator-overloading operators copy-constructor

我不知道,复制构造函数或 operator= 哪个不正确。我测试了两个“坟墓”,打印机工作正常,但在程序结束时编译器说“调试断言失败”。

#pragma once
#include <cstdio>
#include <cmath>
#include <iostream>
#include <cstdlib>

class tomb {
private:
    double *adat;
    int szam;
public:
    tomb(){
        adat = NULL;
        szam = 0;
    }
    tomb(const tomb &u) {
        adat = u.adat;
        szam = u.szam;
    };
    int meret()const {
        return szam;
    }
    ~tomb() {
        delete[] adat;
    }
    double & operator[](int n) { 
        return adat[n];
    }
    const double & operator[](int n)const {
        return adat[n];
    }
    const tomb &operator=(const tomb &a) {
        adat = a.adat;
        szam = a.szam;
        return *this;
    }
    tomb elso_valahany(int n) {

    }

    void push_back(const double &a) {
        double *tmp;
        tmp = new double[szam+1];

        for (int i = 0; i < szam; i++)
        {
            tmp[i] = adat[i];
        }

        tmp[szam] = a;
        delete[] adat;
        adat = tmp;
        ++szam;
    }
    void Kiir()const {
        for (int i = 0; i < szam; i++)
        {
            std::cout << adat[i] << "\n";
        }
    }
};

最佳答案

根据评论,我将向您展示如何进行深度复制:每次复制类时,您不会只复制指向数据的指针,而是复制整个 vector 。

此外,为了简单起见,我将使用 std::vector:

#pragma once
#include <cstdio>
#include <cmath>
#include <iostream>
#include <cstdlib>
#include <vector>

class tomb {
private:
    std::vector<double> adat;
    int szam;
public:
    tomb(){
        szam = 0;
    }
    tomb(const tomb &u) : adat(u.adat), szam(u.szam)
    {
        adat = u.adat;
        szam = u.szam;
    };
    int meret() const {
        return szam;
    }
    ~tomb() {
    }
    double & operator[](int n) const { 
        return adat[n];
    }
    const double & operator[](int n) const {
        return adat[n];
    }
    tomb& operator=(const tomb &a) {
        adat = a.adat;
        szam = a.szam;
        return *this;
    }


tomb elso_valahany(int n) {

    }

    void push_back(const double &a) {
       adat.push_back(a);
        ++szam;
    }
    void Kiir()const {
        for (int i = 0; i < szam; i++)
        {
            std::cout << adat[i] << "\n";
        }
    }

我还没有编译/测试,但现在应该没问题了,因为内存管理是由 std 复制构造函数完成的!

关于c++ - 如何在 Vector 类中创建 operator=?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43835590/

相关文章:

c++ - 使用 GoogleTest 测试读取文件

c++ - 如何让模板模板参数取一个数值?

java - 如何修复 Java :26: error: No suitable constructor found

compiler-errors - Windows 上的 Addict 十六进制包依赖项错误在 Mac 上不会发生

xcode - Mac上的gcc -print-multi-os-directory错误

c++ - 重载运算符时 C++ 代码出错

c++ - 在 openCV 中循环遍历带有蒙版的图像

c++ - 如何将 const unordered_map 中的值分配给另一个 const 变量 - C++

c++ - 我可以对重载了 operator new 的类使用 global operator new 吗?

c++ - 使用模板模板参数对 'operator<<' 进行模糊重载