0
私はKEY_VALUEフライウェイトを使用して学んでいると私は次のコードを書きました:私は、余分なコピーを避けたいのですがフライウェイトオブジェクトのコピーを防止するにはどうすればよいですか?
created bar
Copied
Destroyed bar
Destroyed bar
:私はそれを実行すると、私はfollwing出力を得た
#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");
}
}
を私の本物のFooはコピーするのにかなりの費用がかかるからです。これは、私がフライウェイトを使用している主な理由でもあります。だから、余分なコピーを避ける方法はありますか?
ここでこのコードで遊ぶことができます:http://ideone.com/Xpjmk – Emiliano
コンパイラは何ですか?実際のFoo型で移動コンストラクタを実装できますか? –