我正在努力了解 5 规则。
我有一个 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 &)': attempting to reference a deleted function
为什么要尝试调用复制构造函数?
我什至尝试向复制构造函数添加调试行,但没有打印任何内容:
Renderable(const Renderable& other) : sprite(other.sprite) {
std::cout << "copy constructor";
}
首先,Renderable(sprite)
创建了一个Renderable
。然后您尝试使用该 Renderable
构造 renderable
。从概念上讲,除了复制构造函数之外,它还能使用什么?
为什么要创建一个 Renderable
来初始化 renderable
?该步骤不需要并且不会起作用,因为您没有复制构造函数。您明确表示您不希望概念上使用复制构造函数的代码起作用。
我是一名优秀的程序员,十分优秀!