Je suis en train me C++, et je suis vraiment obtenir un peu confus.
j'ai vraiment eu des problèmes avec le constructeur compréhension/Copier Constructeur/Déplacer Constructeur/Destructeur et leur mise en place correctement.C++ - Constructeur, constructeur de copie, Déplacer Constructor, Destructeur
Je veux mettre en œuvre une copie ainsi qu'un constructeur de déplacement et un destructor dans le class Container
. J'ai d'abord essayé le constructeur de la copie et j'ai pensé que je l'avais bien fait. Malheureusement, le destructeur laisse le programme se bloquer à la fin pour une raison quelconque en essayant de faire . Je pense que j'ai eu quelque chose de mal avant que le champ data
ne soit plus là et que je l'ai copié mal ou quoi que ce soit. J'espère que vous pouvez m'aider et comprendre mes erreurs. J'ai aussi essayé un constructeur de mouvement (en dessous), qui ne fonctionne absolument pas.
Merci pour l'aide les gars. En espérant pouvoir donner quelque chose plus tard :)
classe Container:
#include <iostream>
#include <memory>
class Container
{
public:
Container()
{
length = 0;
data = nullptr;
}
Container(int lengthin):Container()
{
length = lengthin;
data = new double[lengthin];
//data[lengthin];
//double data[lengthin] = {0};
}
Container(std::initializer_list<double> listin)
:Container((int)listin.size())
{
std::uninitialized_copy (listin.begin(), listin.end(), data);
}
//copy constructor - working?
Container(const Container& other):Container(other.length)
{
//data = other.data;
//length = other.length;
for (auto i=0; i<other.length; i++)
{
data[i] = other.data[i];
}
}
//~Container(){length = 0;}
~Container()
{
delete[] data;
length = 0;
}
Container operator+(Container cin)
{
Container cout(cin.length);
cout.length = cin.length;
for (auto i=0; i<cin.length; i++)
{
cout.data[i] = cin.data[i] + data[i];
}
return cout;
}
Container operator-(Container cin)
{
Container cout(cin.length);
cout.length = cin.length;
for (auto i=0; i<cin.length; i++)
{
cout.data[i] = data[i]-cin.data[i];
}
return cout;
}
void print(const std::string &info) const
{
// print the address of this instance, the attributes `length` and
// `data` and the `info` string
std::cout << " " << this << " " << length << " " << data << " "
<< info << std::endl;
}
private:
int length;
double *data;
};
Le programme principal:
int main()
{
Container a({ 1, 2, 3 });
std::cout << " a has address " << &a << std::endl;
Container b = { 4, 5, 6 };
std::cout << " b has address " << &b << std::endl;
Container c(a);
std::cout << " c has address " << &c << std::endl;
Container d = a + b;
std::cout << " d has address " << &d << std::endl;
Container e;
std::cout << " e has address " << &e << std::endl;
e = a + b;
//Container f(std::move(a + b));
//std::cout << " f has address " << &f << std::endl;
return 0;}
Et le constructeur move essayé:
Container(const Container&& other):length(other.length), data(other.data)