【发布时间】:2018-06-09 22:19:21
【问题描述】:
这是我的代码。我不明白为什么它不打印 3,即使在类构造函数中 param1 变为 3。
#include <iostream>
using namespace std;
class A{
int valoare;
public:
A(int param1 = 3):valoare(param1){}
int getValoare(){return this -> valoare;}
};
int main()
{
A vector[] = {*(new A(3)), *(new A(4)), *(new A(5)), *(new A(6))};
cout << vector[2].getValoare();
return 0;
}
【问题讨论】:
-
param1仅在您不提供参数的情况下才会变为3,而实际上您确实这样做了。对于vector[2],此参数为5。 -
你有立即的内存泄漏!您是否可能来自必须使用
new来创建新对象的 Java 或 C# 背景?在 C++ 中你不需要那个。做例如A(3)没有new完全没问题。 -
至于你的问题,不要再猜测 C++ 中的含义,get a few good books 好好学习。
-
vector[2]是使用*(new A(5))初始化的,它赋予其valoare成员值5。并且还会导致内存泄漏 - 通过使用A(5)初始化来避免泄漏。
标签: c++ c++11 constructor default-arguments