私はベクトルまたはゲームオブジェクトを持っています。私は11C++の削除された関数std :: unique_ptrの基本クラスの使用
std::vector< std::unique_ptr<Game> > games_;
ゲームは、派生クラスだけでvalidate()メソッドを実装し、この
class Game {
public:
Game(int id, const std::string& name)
: id_(id), name_(name){}
virtual ~Game();
int play(int w);
virtual void validate() = 0;
int id_;
std::string name_;
};
のように定義された基本クラスであり、C++用にコンパイルする必要があります。
私のマネージャークラスは、スレッドプールに「ゲームをプレイ」したいと思っています。このように完了:
void Manager::playGames() {
boost::asio::io_service ioService;
std::unique_ptr<boost::asio::io_service::work> work(new boost::asio::io_service::work(ioService));
boost::thread_group threadpool; //pool
std::cout << "will start for " << playthreads_ << " threads and " << getTotalRequests() << "total requests\n";
for (std::size_t i = 0; i < playthreads_; ++i)
threadpool.create_thread(boost::bind(&boost::asio::io_service::run, &ioService));
for (std::size_t i=0; i < w_.size(); i++) {
ioService.post(boost::bind(&Game::play, games_[i], 2));
}
work.reset();
threadpool.join_all();
ioService.stop();
}
エラーがboost::bind(&Game::play, games_[i], 2)
については、games_[i]
をバインドするためにコピーされ
/home/manager.cpp: In member function ‘void Manager::playGames()’: /home//manager.cpp:65:74: error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = Game; _Dp = std::default_delete<Game>]’ ioService.post(boost::bind(&Game::play, games_[i], 2)); ^ In file included from /opt/5.2/include/c++/5.2.0/memory:81:0, from /home/manager.hpp:5, from /home/manager.cpp:1: /opt/5.2/include/c++/5.2.0/bits/unique_ptr.h:356:7: note: declared here unique_ptr(const unique_ptr&) = delete;
あなたは何らかの形で、unique_ptrのコピーを要求しています。これは、削除されるのは、移動のみとして定義されているためです。 – Borgleader