gpt4 book ai didi

c++ - C++ 是否强制我定义默认构造函数

转载 作者:太空狗 更新时间:2023-10-29 20:58:36 25 4
gpt4 key购买 nike

我来自 //世界,最近正在开发 如果这是一个愚蠢的问题,请原谅。

当我在一个类中声明一个成员变量时,它应该在运行时的某个时间点被初始化。例如,如果成员变量包装了用户必须为其指定地址的网络设备的功能。用户输入地址后,我将创建 DeviceWrapper 实例。我的类(class)看起来像这样:

class A
{
public:
//Method to instantiate dev and other stuff
private:
DeviceWrapper dev;
}

当声明成员变量时,我的理解是如果我没有在 A 的构造函数中显式调用它,则会调用 DeviceWrapper 的默认构造函数。但是,对于 DeviceWrapper 类,拥有默认构造函数没有意义,因为如果不知道要包装的设备地址,该类就毫无意义。

我是否遗漏了什么,或者 C++ 是否强制我在 DeviceWrapper 中定义一个无意义的默认构造函数,或者使类可变以便包装器在创建后可以接收其地址?

另一种选择是使 dev 成为指向 DeviceWrapper 的指针。我使用指向对象的指针的想法是,拥有实例的对象直接拥有该实例,而所有其他使用它但不拥有的对象都获得指向的指针实例。如果我将 dev 定义为 DeviceWrapper* dev;

,这个概念就会被打破

那么解决这个问题的 C++ 解决方案是什么?

最佳答案

最简单的解决方案是将 DeviceWrapper 包装在以下之一中:

std::optional<DeviceWrapper> dev;
std::unique_ptr<DeviceWrapper> dev;
std::shared_ptr<DeviceWrapper> dev;

所有这三个都将允许您在构造A 之后初始化DeviceWrapper dev。它们都有不同的复制语义,您需要选择对您的应用程序有意义的。

关于c++ - C++ 是否强制我定义默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27274672/

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