c++ - "attempting to reference a deleted function"用于复制构造函数

标签 c++ copy-constructor rule-of-three

我正在努力了解 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?该步骤不需要并且不会起作用,因为您没有复制构造函数。您明确表示您不希望概念上使用复制构造函数的代码起作用。

关于c++ - "attempting to reference a deleted function"用于复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57617286/

相关文章:

c++ - 调用信号的函数堆栈内存和函数控制会发生什么

带复制和赋值的 C++ Qt 反射

C++ : copy-and-swap idiom, 替代构造函数

c++ - 谁能给我一个如何在 C++ 中正确使用 "The Big Three"的例子?

c++ - 安全赋值和复制交换习语

c++ - Eigen C++ 中的矩阵矩阵

C++,拉帕克 : undefined reference to `dsyev' with libraries linked

c++ - 返回右值与按值返回本地对象

c++ - 未调用复制构造函数

ios - 如何重写 iOS 纯 swift 拷贝构造函数