C++ 创建构造函数和类实例的最佳方式

时间:2021-04-14 16:57:39

标签: c++ oop

我对 C++ 语言还很陌生,但我有 Python 的经验和 Java 的一些经验。

由于 C++ 非常强大,而且实现某些行为的方法总是很少,我有 2 个与 oop 相关的问题。

  1. 创建带参数的类构造函数的最佳方法是什么? 例如,假设我们有这样的东西:

    结构测试{ 整数 x; 输入 y; };

构造函数有两种流行的方法:

1.

   Test(int x, int y) : x{x}, y{y} { // rest of constructor};
   Test(int x1, int y1) {
     x = x1;
     y = y1;
     // rest of constructor
   }

我应该使用哪个,为什么?

  1. 哪种风格更像 C++ 来创建类对象,为什么?

    Test* testptr = new Test(1, 1);

对比

Test test = Test(1, 1);

1 个答案:

答案 0 :(得分:2)

  1. 创建 ConcurrentHashMap 的最 C++ 风格的方法是 struct。而且您不需要声明自己的构造函数。

如果您真的想使用构造函数,请使用具有初始化语法的构造函数。这是区别。让我们考虑一个具有两个字段的结构。所以它看起来像:struct_name{value1, value2}。当您使用初始化语法时,您在大括号之间编写的实际构造函数代码之前立即创建所需的结构。所以它看起来像:{one, two}(我们现在有了值)。但是,当您在构造函数体内初始化这些字段时,它会先创建一个具有默认值的结构,然后再更改它们。所以它看起来像:{1, 2}。 好的,关于它的最后一件事是参数声明。您应该使用常量引用,因为它可以防止程序员更改函数体内的这些参数,并且这些变量是通过引用传递而不是复制的。我们来看两个例子:

{0, 0} ...constructor is working... {1,2}

void fun1(int a, int b); void fun2(const int& a, const int& b); 在这里复制这两个参数,然后在正文中使用它们。但是,fun1 仅获取对变量的引用并直接处理它们的值。此外,由于 fun2,您无法更改它们,因此是完全安全的。

  1. 现代 C++ 不喜欢 const 运算符。我们仅在构造函数中使用它并在析构函数中调用 new 运算符。但是,不建议在其他情况下使用 new 运算符,因为它更难防止内存泄漏,并且违反了 RAII 习惯用法。如果您确实必须使用原始指针,请考虑将它们放在 smart pointers 中。
相关问题