boost make_shared nimmt eine const-Referenz auf. Wie kann man das umgehen?

Ich verwende in meinem Programm gemeinsame Boost-Zeiger und habe eine Klasse, die als Parameter einen Verweis auf ein anderes Objekt verwendet. Das Problem, auf das ich stoße, ist, dass die make_shared-Funktion erfordert, dass alle Parameter eine konstante Referenz sind, und dass Kompilierungsfehler auftreten, wenn der Konstruktor meiner Klasse die Übergabe von konstanten Referenzparametern nicht zulässt.

Kennt jemand den Grund dafür? Kann ich irgendetwas tun, um das zu umgehen?

Codebeispiel für das, was mir Probleme bereitet:

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;
}

Dies führt zu einem Compilerfehler, der Folgendes angibt

: make_shared.hpp: 185: error: keine passende Funktion für den Aufruf von `Object :: Object (const int &) 'note: Kandidaten sind: Object :: Object (const Object &) note: Object :: Object (int &)

Wenn der Parameter des Objects-Konstruktors eine const int ist, funktioniert dies. Ich bin gespannt, warum sich make_shared so verhält.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage