类中的动态数组和指针很难找到定义它们的正确方法

时间:2012-11-01 06:43:42

标签: c++ arrays pointers header header-files

我希望构造函数创建一个动态数组,并将传递给构造函数的参数赋给数组成员。

标题中的简化版本:

//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(或更多)次的基础知识,但无济于事。我希望我想要做的事实际上是可能的。如果没有,最接近的是什么?

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)

你有两个问题:

  1. 您没有关注 Rule of Three
  2. 您有未定义的行为
  3. 详细说明:

    delete var;
    

    应该是:

    delete []var;
    

    new需要deletenew[]需要delete [],mismtach会导致未定义的行为。

    建议:

    您应该使用std::vectorstd::array而不是动态c风格的数组。它将为您节省所有的努力,并且它们不易出错。

答案 2 :(得分:0)

如果你不喜欢这个例子中的向量,你可以使用std :: pair,但是可以使用向量。我好几个月没用过阵列了。