Je suis en train de construire mon propre pointeur intelligent qui me permettra de le déclarer comme ceci:pointeur intelligent avec constructeur explicite me fait une erreur
SmartPtr<MyClass> ptr = new MyClass;
Je veux que le constructeur soit explicite si je l'ai fait comme ceci:
template<class T>
class SmartPtr
{
public:
SmartPtr();
explicit SmartPtr(T* _ptr);
explicit SmartPtr(const SmartPtr& other);
}
Cependant, lorsque je tente de le déclarer comme je l'ai mentionné au-dessus, je reçois l'erreur suivante:
error: conversion from ‘MyClass*’ to non-scalar type ‘SmartPtr<MyClass>’ requested
Je sais que l'erreur est due au fait que la copie CTOR a une syntaxe spéciale avec '=' et qu'une conversion CTOR ne peut pas être déclarée dans cette méthode. Ma question est, existe-t-il une méthode pour garder la syntaxe requise que j'ai mentionnée ci-dessus, et avoir un CTOR explicite?
Désolé, Je voulais dire constructeur de copie, je vais éditer –