Salut (l'anglais n'est pas ma langue maternelle, s'il vous plaît me comprendre même si je fais des erreurs! Merci!)Classe de modèle C++, comment déclarer un constructeur de copie pour une situation spécifique?
J'écris une classe de modèle qui peut contenir un pointeur.
template <typename T>
class SmartPtr {
private:
T value;
public:
SmartPtr() {};
~SmartPtr() {};
SmartPtr(T* a)
{
this->value = *a;
}
SmartPtr(SmartPtr* a)
{
this->value = a->get_Value();
}
SmartPtr(SmartPtr const* a)
{
this->value = a->get_Value();
}
T get_Value()const{
return this->value;
}
};
Cette classe est appelée modèle SmartPtr et
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; }
};
c'est ma classe de test.
Quand je déclare
SmartPtr<Test> ptr_t1 = SmartPtr<Test>(new Test);
dans mon main.cpp,
le résultat après la compilation est
Test::Test()
Test::Test()
Test& Test::operator=(Test const&)
Test::~Test()
mais le résultat que je veux obtenir est
Test::Test()
Test::~Test()
Y a-t-il un constructeur de copie de classe de modèle spécifique que j'ai besoin d'écrire Dans cette situation?
Merci beaucoup pour votre patience!
Voir cette question, pas si sûr dupe cependant: https://stackoverflow.com/questions/926752/why-should-i-prefer-to-use-member-initialization-list – Rakete1111
'this-> value = * a; 'est assignation .... – StoryTeller
@StoryTeller Merci pour le commentaire. Désolé, ça fait 10 jours avec C++ et je manque de connaissances. Je ne devrais pas faire une cession? –