c++ - 有没有办法从另一个类构造函数的主体创建没有默认构造函数的实例?
问题描述
我正在尝试从另一个类的构造函数创建一个没有默认构造函数的类实例,但不将它们作为类初始值设定项传递。这是我正在尝试做的示例代码:
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
,所以我将临时对象复制到成员变量,这意味着需要销毁临时对象。
有没有办法可以摆脱临时对象并直接初始化设备?
解决方案
您可以使用 mem-initializer 列表编写,例如:
class Renderer {
public:
Renderer() : device( getPhysicalDevice() ) {
}
PhysicalDevice getPhysicalDevice();
Device device;
};
至于您的构造函数定义,则在此语句中:
device = Device(physicalDevice);
假设在将控件传递给构造函数主体之前,已经使用默认构造函数(未定义)创建了数据成员设备。所以编译器发出错误。
推荐阅读
- puppet - 使用 Puppet 为 Debian 设置存储库
- symfony - 是否可以在 Symfony 4 中使用没有 AppBundle 的 ongr-elasticsearch 包?
- sql-server - 将字段从 nVarchar 转换为 Numeric,用于多行性能的 sql 函数
- c - 如何使我的代码独立于“RTOS”?
- wordpress - 用于 Wordpress 的 Gutenburg 组件的标准编辑器样式
- phpmyadmin - 无法连接到远程数据库
- flutter - 每次加载应用程序时,如何防止 Firestore 加载整个用户数据
- c++ - 无法使用 Visual Studio 2010 和 Qt 版本 4.8.0 创建“Qt Gui 应用程序”
- javafx - 如何将对象传递给不同控制器中的 ArrayList(java FX)
- java - Java:为多个线程使用同一个对象的最佳方式是什么?