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

标签 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;

最佳答案

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

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

最后一个想法是,如果使用构造函数,您的代码将会更干净、更易于调试和维护。

关于c++ - 使用构造函数初始化结构或之后设置其值是否更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51800101/

相关文章:

c++ - R/C++ 中集合覆盖问题的变体

c++ - 通用二叉树节点析构函数问题

c++ - 如何将 QTableWidgetItem 转换为自定义子类

c++ - QT什么时候不允许一行多次转换,比如QString to char*

c++ - 如何阻止 LWA_COLORKEY 绘制灰色轮廓?

c++ - CUDA,Memcpy 中的 "illegal memory access was encountered"

c++ - VS2015 : LNK2019 error when linking with Muiload. 库

c++ - Qt/C++ : Getting the data at a certain cell in a QTableView

c++ - 功能/不可变数据结构在非垃圾收集上下文中是否仍然对并发有用?

c++ - 为什么右值引用会被通用引用变成左值引用