gpt4 book ai didi

c++ - 如何防止复制享元对象?

转载 作者:行者123 更新时间:2023-11-28 08:08:45 27 4
gpt4 key购买 nike

我正在学习使用 key_value flyweights 并编写了以下代码:

#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");
}
}

当我运行它时,我得到了以下输出:

created bar
Copied
Destroyed bar
Destroyed bar

我想避免额外的拷贝,因为我真正的 Foo 的复制成本很高。这也是我使用享元的主要原因。那么,有没有办法避免额外复制?

最佳答案

您不必担心这一点,因为在某些情况下,编译器可能会使用 RVO 对其进行优化。尽可能使用编译器选项启用此类优化。

尤其是对于 C++11,您几乎不必担心它,因为它引入了移动语义,即使以享元模式动态创建一些临时对象也不会花费您太多。

关于c++ - 如何防止复制享元对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9620077/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com