我在创建对象、将它们添加到容器类以及让它们超出 C++ 范围时遇到问题。
举个例子,我的main.cpp
Container container;
for (unsigned int i = 0; i < 10; i++) {
Item item;
container.add_item(item);
}
以及container.h的接口(interface)
struct Container {
std::vector<std::reference_wrapper<Item>> items;
void add_item(Item& item); // Push back of items vector.
};
和item.h
struct Item {
std::unique_ptr<AnotherThing> unrelated_thing;
};
问题稍后出现在我的主类中,在 for 循环内创建的容器 超出了范围。如果我将 add_item 更改为按值传递,它会给我带来 unique_ptr 和复制构造函数的问题。
是否有一些惯用的方法可以在范围内创建对象并将它们“转移”到另一个类?
最佳答案
If I change add_item to pass by value, it gives me issues with the unique_ptr and copy constructor.
你的 vector 需要按值保存对象:
std::vector<Item> items;
然后你需要在按值传递时将你的对象移动到 vector 中:
void Container::add_item( Item item )
{
items.push_back( std::move( item ) );
}
然后你还需要在循环中移动你的对象:
for (unsigned int i = 0; i < 10; i++) {
Item item;
container.add_item( std::move(item) );
}
或者你可以简单地通过临时:
for (unsigned int i = 0; i < 10; i++) {
container.add_item( Item() );
}
关于c++ - 对象超出范围/转移所有权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52503576/