我试图让我的头脑围绕 5 规则。
我有一个 class Renderable
,它定义了一个自定义析构函数,所以它似乎是 5 规则的一个很好的候选者。这个类在它的构造函数中创建了一些资源,所以我的第一个想法是我应该防止复制:
class Renderable {
public:
Renderable(const Sprite&) {
// Allocate resources
}
~Renderable() {
// Free resources
}
// Prevent copying
Renderable(const Renderable& other) = delete;
}
我有另一个类,它在其构造函数的初始化列表中Unit
创建一个:Renderable
class Unit {
public:
Unit(const Sprite& sprite) :
renderable(Renderable(sprite)) {}
private:
Renderable renderable;
}
我希望这会调用常规Renderable
构造函数,但我得到了错误:
Renderable::Renderable(const Renderable &)':试图引用已删除的函数
为什么这试图调用复制构造函数?
我什至尝试在复制构造函数中添加调试行,但没有打印任何内容:
Renderable(const Renderable& other) : sprite(other.sprite) {
std::cout << "copy constructor";
}