LLVM find_if隐式删除的复制构造函数,具有unique_ptr<>
LLVM find_if implicitly-deleted copy constructor with unique_ptr<>
所以我正在读一本关于SFML和C++11游戏开发的书,其中一行用于创建场景树的代码给我带来了麻烦,这一点我有点难以理解。由于find_if算法中unique_ptr的副本构造函数被隐式删除,编译器返回错误。
这是带有find_if调用的函数。Ptr是std::unique_ptr<SceneNode>
的typedef。这是我目前唯一使用find_if的地方。
SceneNode::Ptr SceneNode::detachChild(const SceneNode& node) {
auto found = std::find_if(mChildren.begin(), mChildren.end(), [&] (Ptr p) -> bool { return p.get() == &node; });
assert(found != mChildren.end());
Ptr result = std::move(*found);
result->mParent = nullptr;
mChildren.erase(found);
return result;
}
返回的错误是在算法本身中出现的,特别是"调用隐式删除的‘Ptr’的复制构造函数"
在LLVM中隐式删除复制构造函数的调用中有一个相关的问题,但在我的情况下,答案没有多大意义。
需要注意的是,我正在使用最新的Xcode5版本进行开发。
find_if
调用中的lambda表达式通过值获取Ptr
(也称为unique_ptr<SceneNode>
)参数,这意味着它正在尝试复制unique_ptr
;unique_ptr
不可复制,因此出现错误。
将lambda表达式更改为以下内容:
[&] (Ptr const& p) -> bool { return p.get() == &node; }
// ^^^^^^
// take the argument by reference and avoid copying
相关文章:
- 具有瞬态资源的RAII类
- 具有默认模板参数的多态类的模板推导失败
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- std::具有相同基类的类的变体
- 命名空间中具有.h和.cpp文件的类
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- 为什么 std::unique 不调用 std::sort?
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 具有N列和N行的矩阵,列必须具有N-1、N-2等值
- 具有重复类型的C++可变模板
- 具有最大子序列大小的序列,每个元素都相同
- 同时具有"聚合初始化"和"模板推导"
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 初始化具有非默认构造函数的std::数组项的更好方法
- 如何从具有移动语义的类对象中生成共享指针