我对 C++ 语言还很陌生,但我有 Python 的经验和 Java 的一些经验。
由于 C++ 非常强大,而且实现某些行为的方法总是很少,我有 2 个与 oop 相关的问题。
创建带参数的类构造函数的最佳方法是什么? 例如,假设我们有这样的东西:
结构测试{ 整数 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
}
我应该使用哪个,为什么?
哪种风格更像 C++ 来创建类对象,为什么?
Test* testptr = new Test(1, 1);
对比
Test test = Test(1, 1);
答案 0 :(得分:2)
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
,您无法更改它们,因此是完全安全的。
const
运算符。我们仅在构造函数中使用它并在析构函数中调用 new
运算符。但是,不建议在其他情况下使用 new 运算符,因为它更难防止内存泄漏,并且违反了 RAII 习惯用法。如果您确实必须使用原始指针,请考虑将它们放在 smart pointers 中。