c++ - 默认构造函数是在什么情况下生成的?

标签 c++ constructor default-constructor

我有以下类(class):

class Tileset { //base class

public:
    static std::vector<Tileset*> list;
    virtual ~Tileset() = 0;

protected:
    std::vector<Tile> tiles_list;
    sf::Texture sheet;

private: //non copiable
    Tileset(const Tileset&);
    Tileset& operator=(const Tileset&);
};

其中 sf::Texture 有一个默认构造函数

根据我的理解,应该生成默认构造函数,因为每个成员也可以是默认构造的。 然而,当我尝试在不调用 Tileset 构造函数的情况下构造派生对象时,我遇到了编译器错误。 有人可以解释为什么没有生成默认构造函数吗?

编辑:忘记提及 Tile 类没有默认构造函数。我不确定这是否会改变什么

最佳答案

如果满足以下任一条件,则不会生成默认构造函数

  • 声明了一个用户定义的构造函数
  • 该类型有一个const 或引用字段

您声明了构造函数,因此 C++ 不会提供默认生成的构造函数。在这种情况下,虽然 Tileset 的所有字段都有有用的默认构造函数,因此在这里定义默认构造函数非常容易

Tileset() { }

关于c++ - 默认构造函数是在什么情况下生成的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10638527/

相关文章:

c++ - 没有合适的默认构造函数可用 - Visual Studio

c++ - 需要带有纯抽象类类型参数的子句?

C++ 不同的错误使用不同的 gcc 优化

c++ - 在 C++ 中,编写在 main() 之前执行的代码是一种好的形式吗?

java - 无法实例化类 models.Customer。它必须有一个默认构造函数

java - LinkedList 数据结构,为什么我们需要从不同的构造函数调用空的默认构造函数

c++ - 获取模块大小

c++ - txt 中的 vector 垫

java - 创建主类的实例

c++ - C++中构造函数的初始化顺序