1

这段代码可以编译,但我认为它没有达到我的预期,即移动,不要复制,boost::any在堆栈上创建的对象到std::vector<boost::any>

boost::any var;
var = std::string("StackOverflow");

std::vector<boost::any> vm;
vm.push_back(std::move(var));

for (auto& i : vm)
{
  std::cout << boost::any_cast<std::string>(i) << std::endl; // yes a copy exists 
}
std::cout << boost::any_cast<std::string>(var) << std::endl; // but this copy still exists too. was it not moved?? 
4

1 回答 1

3

如果您查看boost/any.hpp并观察它的源代码(至少找到移动字),您会发现它完全是 C++11 不知道的(不幸的是)!所以你最好用它boost::any::swap模拟移动分配(如果你还想用boost::any的话)

于 2013-08-10T19:50:02.730 回答