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++ - c++11对于三种方法的规则如何实现 "... = default;"

c++ - 派生类构造函数依赖问题

Java - 在实例化时使用反射来防止字段分配?

c++ - 为什么成员 `float x` 在 main() 中为对象 `0.` 和 `a` 初始化为 `b`?

c# - 为什么 String 类没有无参数构造函数?

c++ - 错误: Cannot synthesize a Constructor for A

c++ - strcat 查询 (string.h)

c++ - 有 C++ 解释器这样的东西吗?

c++ - 为面向对象的 C++ 代码开发 C 包装 API

c++ - 为什么不能将 std::stol 转换为 std::function 对象?