我想创建一个T类型对象的向量。我有以下几点:
vector<T> objects; //global
void CreateObject(some_params){
T t = T();
/* code follows that computes members of t.
T is a complex class and all members require some computation
to be given a value */
objects.push_back(T(t) ); //copy constructor using t and push in vector
}
void funtion1(some_params){
//iterate over all objects previously pushed, and do some computation.
}
void function2(some_params){
//iterate over all objects previously pushed, and do some computation.
}
int main(){
createObject(some_params);
liboptpp_object.optimize(function1, function2);
}
我的副本构造函数:
class T{
T(const T& t){
this->member1 = t.member1;
this->member2 = t.member2;
/* and so on for all data members */
}
}
从上面的汇总代码中可以看出,我创建了一个对象向量。函数function1
,function2
将使用此向量中的对象来进一步执行某些计算。我试图使用Opt++
库最小化数学函数。 Opt++
实例的optimize
函数作为参数指向两个函数 - function1
,function2
。因此,当Opt ++尝试最小化函数时,将调用这两个函数。然后,这些函数应对先前创建的对象的向量进行操作并返回一些值。这就是整个画面。
但是,当两个函数被Opt ++调用时,当它们遍历对象向量时,可以看到大多数对象都被破坏了 - 它们有垃圾值,{{{{{{ 1}}方法。所以这些对象的内存现在包含随机值。 createObject()
方法是创建和推送这些对象的唯一位置。以后不会修改对象。
createObject()
填充此对象向量的方式是否有问题;是否有一些违反范围或某事?我不确定发生了什么,但我认为我创建矢量的方式可能是错误的。