gpt4 book ai didi

c++ - 编译但每次都崩溃#class template c++

转载 作者:行者123 更新时间:2023-11-30 05:06:38 27 4
gpt4 key购买 nike

我需要你的帮助。我不明白为什么,但是当我编译我的程序时,它崩溃了。如果我删除

bool c = tabInt==TabInt2;

在我看来,它不会崩溃。你知道如何解决这个问题吗?

MonTableau.h

template <class Type> class MonTableau
{

private:
int debut;
int fin;
int taille;
Type * adr;

public:
MonTableau (int, int);
MonTableau (int);
~MonTableau();
Type & operator [] (int);
bool operator == (MonTableau) const;
bool operator != (MonTableau) const;
};

MonTableau.cpp

#include <iostream>
#include "MonTableau.h"
using namespace std;



template<class Type>
MonTableau<Type> :: MonTableau (int d, int f)
{
if(f>d)
{
debut=d; fin=f ; taille= f-d; adr= new Type [taille];
}
else
{
cout << "Taille non valide" << endl;
}
}

template<class Type>
MonTableau<Type>:: MonTableau (int f)
{
if(f>0)
{
debut=0; fin=taille=f ; adr= new Type [taille];
}
else
{
cout << "Taille non valide" << endl;
}
}

template<class Type>
MonTableau<Type>:: ~MonTableau() {delete adr;}

template<class Type>
Type& MonTableau<Type>:: operator [] (int i)
{
return adr[i-debut];

}


template<class Type>
bool MonTableau<Type> :: operator == (MonTableau a) const
{

if(taille==a.taille)
{
for(int k=0;k<taille;k++)
{
if( adr[k] != a.adr[k]) return false;
}
return true;
}
else return false;
}




template<class Type>
bool MonTableau<Type>:: operator != (MonTableau a) const
{
if(taille==a.taille)
{
for(int i=0;i<taille;i++)
{
if(adr[i]!=a.adr[i]) return true;
}
return false;
}
else return true;
}





int main()
{
MonTableau<int> tabInt(5);
MonTableau<int> TabInt2(-2,3);
for(int i=0;i<5;i++)
{
TabInt2[i-2]=tabInt[i]=i;
}
bool c = tabInt==TabInt2;


return 0;
}

最佳答案

问题是你没有关注 The Rule of Three .

当您调用 operator== 函数时,您正在制作对象的浅表拷贝。当该对象超出范围时,您将删除内存。当 main 中的变量超出范围时,该内存将再次被删除。这会导致未定义的行为。在您的情况下,这会导致程序崩溃。

您可以通过在 operator==operator!= 函数中传递 const& 来临时解决这个问题。

  bool operator == (MonTableau const&) const;
bool operator != (MonTableau const&) const;

真正的修复是遵循The Rule of Three .

关于c++ - 编译但每次都崩溃#class template c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47837623/

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