gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 14:59:29 25 4
gpt4 key购买 nike

我正在努力了解 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com