【发布时间】:2017-04-04 20:52:39
【问题描述】:
我知道这可能是一个微不足道的问题,但我坚持下去。我用谷歌搜索了一段时间,但没有成功。
我有一个类和一个带有一些参数的构造函数,它的定义是这样的:
class MyClass {
private:
int _myInt;
double _myDouble;
std::vector<double> _myVector;
public:
MyClass(int myInt, double myDouble, std::vector<double> myVector);
MyClass(int myInt, double myDouble, otherVectorClass myVector);
int getMyInt();
double getMyDouble();
std::vector<double> getMyVector();
};
MyClass::MyClass(int myInt, double myDouble, std::vector<double> myVector) {
_myInt = myInt;
_myDouble = myDouble;
_myVector = myVector;
}
MyClass::MyClass(int myInt, double myDouble, otherVectorClass myVector) {
std::vector<double> tempVector = functionTransformingSTDVector(myVector);
MyClass(myInt, myDouble, tempVector);
}
// getters
int MyClass::getMyInt() { return _myInt; }
double MyClass::getMyDouble() { return _myDouble; }
std::vector<double> MyClass::getMyVector() { return _myVector; }
在另一种方法中,我使用以下代码对其进行实例化:
std::vector<MyClass> myContainer;
int j = 0;
while(j<10) {
j++;
double d = 0.04;
otherVectorClass v = function_returning_vector(); // It works fine.
MyClass anInstance(j, d, v);
myContainer.push_back(anInstance);
}
我来发现我的错误,我调用第二个构造函数,将“向量”的特殊情况转换为 std::vector 并调用第一个构造函数,但是第一个构造函数上的私有变量按预期改变,但是做不在原来的构造函数调用上。
如果我更改第二个构造函数来转换向量,并直接分配变量,那么一切正常。
如何从另一个构造函数调用一个构造函数,以避免代码重复。
谢谢。
【问题讨论】:
-
"因为 "anInstance" 已丢失所有值,并已被重置。" - 你怎么会知道这事?它被“重置”为什么值?
-
可能您的默认复制构造函数设置不正确。提示:
MyClass::MyClass(...) : _myInt(myInt), _myDouble(_myDouble), myVector(myVector)是将这些链接起来的更简单方法。 -
@tadman 他不需要复制构造函数。
-
@NeilButterworth 够公平的。
-
我会使用
MyClass::MyClass(...) : ..., _myVector(myVector)而不是MyClass::MyClass(...) : ..., _myVector(std::move(myVector))。
标签: c++ class constructor