我希望构造函数创建一个动态数组,并将传递给构造函数的参数赋给数组成员。
标题中的简化版本:
//in classes.h
#ifndef classes_h
#define classes_h
#include <iostream>
class Base{
int a,*var;
public:
Base();
Base(int);
~Base();
int func(int);
};
#endif
在* .cpp:
中//In classes.cpp
#incldue "classes.h"
Base::Base(int a){
var=new int[2];
var[0]=a;
var[1]=func(a);
}
Base::~Base(){
delete var;
}
int Base::func(int b){
return b++;
}
int main(){
Base obj(1);
return 0;}
我需要能够将该数组传递给将以某种方式修改它的函数,但实际上我在定义数组时遇到了更多麻烦......
我没有从编译器或链接器中得到任何错误,但通过调试我得出结论问题是围绕数组的创建。
我查阅了指针,动态数组和类3(或更多)次的基础知识,但无济于事。我希望我想要做的事实际上是可能的。如果没有,最接近的是什么?
答案 0 :(得分:1)
由于
,您正在遇到未定义的行为var=new int[2];
被释放
delete var;
而不是delete[] var;
。
您应该使用std::vector<int>
代替。这样,您无需担心析构函数/复制构造函数/赋值运算符。
另外,请注意
int Base::func(int b){
return b++;
}
基本上是无操作,因为返回了b
的先前值。您的意思是return b+1
吗?
答案 1 :(得分:1)
你有两个问题:
详细说明:
delete var;
应该是:
delete []var;
new
需要delete
而new[]
需要delete []
,mismtach会导致未定义的行为。
建议:
您应该使用std::vector
或std::array
而不是动态c风格的数组。它将为您节省所有的努力,并且它们不易出错。
答案 2 :(得分:0)
如果你不喜欢这个例子中的向量,你可以使用std :: pair,但是可以使用向量。我好几个月没用过阵列了。