J'écris une classe de modèle avec le paramètre non typeClasse de modèle C++ avec paramètre non-type: comment surcharger l'opérateur assign?
class Test
{
public:
Test() { std::cout << "Test::Test()" << std::endl; }
Test(Test const&) { std::cout << "Test::Test(Test const&)" << std::endl; }
~Test() { std::cout << "Test::~Test()" << std::endl; }
Test& operator=(Test const&)
{
std::cout << "Test& Test::operator=(Test const&)" << std::endl;
return *this;
}
void print() const { std::cout << "Test::print() const" << std::endl; }
void print() { std::cout << "Test::print()" << std::endl; }
};
Au-dessus est mon "test" classe pour tester ma classe de modèle et
template <typename T, unsigned int n>
class Array
{
private:
T* value;
public:
Array() {
this->value = new T[n];
}
~Array() {
delete[] this->value;
}
Array* operator=(const Array* arr)
{
this->value = arr->value;
return this->value;
}
T& operator[](int a) {
return this->value[a];
}
unsigned int size()
{
return n;
}
};
Au-dessus est ma classe de modèle avec non type paramètre.
int main(int, char*[])
{
/*first*/ Array<Test, 3> arr_1;
/*second*/ Array<Test, 3> arr_3 = arr_1;
return 0;
}
Dans mon fichier main.cpp,
Je fais l'objet de test de classe 3 fois avec le premier,
et je veux surcharger l'opérateur assign faire le second.
J'ai essayé avec
Array* operator=(const Array* arr)
{
this->value = arr->value;
return this->value;
}
mais ça segfaults »après avoir appelé la destructor infiniment.
Je voudrais savoir comment puis-je écrire la surcharge de l'opérateur assign dans ce cas.
Merci!
Généralement, un opérateur d'affectation prend une * référence * pour un objet du même type, pas un pointeur * *. Était-ce intentionnel? – templatetypedef
'Array arr_3 = arr_1;' utilise un constructeur de copie, pas un opérateur d'affectation de copie. Dans tous les cas, 'Array' ne met pas explicitement en oeuvre non plus; les deux sont implicitement définis. –
@templatetypedef, j'ai essayé avec Array & operator = (const Array & arr) mais cela n'a pas changé le résultat. Peut-être que je n'implique pas correctement la méthode. –