对于容器,例如
std::map< std::string, std::unique_ptr< Foo >>
,就目前而言,在gcc 4.7.2中,似乎尚未实现emplace()
。
不幸的是,我无法直接通过值存储Foo,因为它是一个抽象超类。
作为一个简单但低效的占位符,我一直在使用std::map< std::string, Foo* >
和 std::vector< std::unique_ptr< Foo >>
以进行垃圾回收。
你是否有更高效且更易于替换的中间解决方案,等到emplace()
可用时再进行替换?
new
是一项值得称赞的事业。但是,假设我需要插入一个foo->clone()
到 map 中,因为我不知道我有什么样的Foo
,而不是构造一个新的 Bar 实例,你会如何使Foo* Bar::clone()
避免调用new
?或者这样做是否可以,因为它不会被视为客户端代码? - kfmfe04std::unique_ptr<Foo>
。 - GManNickG