Pregunta

Estoy aprendiendo usando PEWEWS PEWHEYS KEY_VALUE y escribí el siguiente código:

#include <iostream>
#include <string>
#include <boost/flyweight.hpp>
#include <boost/flyweight/key_value.hpp>
#include <boost/flyweight/no_locking.hpp>

class Foo
{
    std::string name_;
public:
    Foo(const std::string& name) { name_ = name; std::cout << "created " << name << "\n"; }
    Foo(const Foo& f) { name_ = f.name_; std::cout << "Copied\n"; }
    ~Foo() {std::cout << "Destroyed " << name_ << "\n"; }
};

typedef boost::flyweight< boost::flyweights::key_value<std::string, Foo >,  boost::flyweights::no_locking > FooLoader;

int main()
{
{
    Foo myF = FooLoader("bar");
}
}

Cuando lo ejecuto, obtuve la salida de Follwing:

created bar
Copied
Destroyed bar
Destroyed bar

Me gustaría evitar la copia extra, ya que mi verdadero foo es bastante caro de copiar.Esta es también la razón principal por la que estoy usando un peso mosca.Entonces, ¿hay una manera de evitar la copia extra?

¿Fue útil?

Solución

No debe preocuparse por eso, ya que el compilador puede optimizar esto, en algunos casos, utilizando RVO.Use las opciones del compilador para habilitar esa optimización siempre que sea posible.

y especialmente con C ++ 11, casi nunca debe preocuparse por ello, ya que ha introducido movimiento-semántica que no le cuesta mucho, incluso si algunos objetos temporales se crean sobre la mosca en un patrón de peso mueble.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top