J'utilise des pointeurs partagés boost dans mon programme, et j'ai une classe qui prend comme paramètre une référence à un autre objet. Le problème que je rencontre est que la fonction make_shared exige que tous les paramètres soient des références constantes, et j'obtiens des erreurs de compilation si le constructeur de ma classe ne permet pas de passer des paramètres de référence constants.
Quelqu'un connaît-il la raison de cette situation ? En outre, y a-t-il quelque chose que je puisse faire pour contourner ce problème ?
exemple de code de ce qui me pose problème :
class Object
{
public:
Object(int& i)
{
i = 2;
}
};
int main(int argc, char *argv[])
{
int i = 0;
boost::shared_ptr<Object> obj = boost::make_shared<Object>(i);
return 1;
}
- Il en résulte une erreur de compilation qui se lit comme suit
make_shared.hpp:185 : error : no matching function for call to `Object::Object(const int&)' (erreur : aucune fonction correspondante pour l'appel à `Object::Object(const int&)') note : les candidats sont : Object::Object(const Object&) note : Object::Object(int&)
Si le paramètre du constructeur d'Objects est un const int, cela fonctionne. Je suis curieux de savoir pourquoi make_shared se comporte de cette façon.
0 votes
Pouvez-vous nous montrer un peu de code pour démontrer comment vous voulez utiliser
make_shared()
?