首页 > 解决方案 > 有没有办法从另一个类构造函数的主体创建没有默认构造函数的实例?

问题描述

我正在尝试从另一个类的构造函数创建一个没有默认构造函数的类实例,但不将它们作为类初始值设定项传递。这是我正在尝试做的示例代码:

class Device {
public:
  Device(const PhysicalDevice& device) { ... }
};

class Renderer {
public:
  Renderer() {
    auto physicalDevice = getPhysicalDevice();
    device = Device(physicalDevice); // <-- this causes me a problem
  }

  PhysicalDevice getPhysicalDevice();

  Device device;
};

因为我创建了一个设备对象并将其分配给成员变量device,所以我将临时对象复制到成员变量,这意味着需要销毁临时对象。

有没有办法可以摆脱临时对象并直接初始化设备?

标签: c++

解决方案


您可以使用 mem-initializer 列表编写,例如:

class Renderer {
public:
  Renderer() : device( getPhysicalDevice() ) {
  }

  PhysicalDevice getPhysicalDevice();

  Device device;
};

至于您的构造函数定义,则在此语句中:

device = Device(physicalDevice);

假设在将控件传递给构造函数主体之前,已经使用默认构造函数(未定义)创建了数据成员设备。所以编译器发出错误。


推荐阅读