用构造函数初始化结构或在之后设置其值是否更好?

时间:2018-08-11 13:23:50

标签: c++

例如,如果我有这样的结构:

struct Client_t {
std::string name;
uint16_t id;
};

在此结构上最好有一个构造函数

Client_t(std::string name, uint16_t id) :
    name(std::move(name)), id(id) {}

并像这样初始化它:

Client_t* client = new Client_t(name, id)

还是这样做更好?

Client_t* client = new Client();
client->name = name;
client->id = id;

2 个答案:

答案 0 :(得分:2)

这里有一些始终使用构造函数的充分理由:

  • 您可能要验证参数;
  • 如果您突然在结构/类中添加了更多必填字段,则只需修改构造函数签名,然后让编译器告诉您代码应在何处固定。没有构造函数,这可能很难跟踪。某些IDE可以帮助完成此任务,但是在这里,编译器是您的朋友;
  • 您可能想调试对象的初始化,以便可以在构造函数中添加断点(而不是将断点添加到代码的随机部分中);
  • 在某些情况下,您可能希望禁止不必要的隐式类型转换,因此您可以在构造函数中使用explicit关键字。 What does the explicit keyword mean?
  • 您可能想为初始化添加不同的风格。例如,您可能想要一个构造函数以 rvalues 的形式接收参数,而另一个构造函数将其作为引用或按值的形式接收。

作为最后的想法,如果使用构造函数,您的代码将更加简洁,易于调试和维护。

答案 1 :(得分:0)

构造函数的全部目的是将对象初始化为功能状态。

如果无需完成某些初始化就可以认为对象已完全形成并且可以正常运行,那么可以肯定的是,您可以在以后(也许)保留这些位。但是,如果要使对象能够正常工作,则必须由构造函数来完成,这样调用者就不会忘记以后再做。