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

Dynamic array and pointer in a class trouble finding the right way to define them

本文关键字:定义 方法 动态 数组 指针      更新时间:2023-10-16

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

我在标题中拥有的简化版本:

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

您有两个问题:

  1. 您不遵循三个的规则。
  2. 您有一个未定义的行为

详细信息:

delete var;

应该是:

delete []var;

new需要deletenew[]需要delete [],不确定的行为导致不确定的行为。

建议:

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

由于

var=new int[2];

被释放

delete var;

而不是delete[] var;

您应该改用std::vector<int>。这样,您不必担心destructor/copy构造函数/分配运算符。

另外,请注意

int Base::func(int b){
    return b++;
}

基本上是一个no-op,因为返回了b的先前值。您是说return b+1

如果您不喜欢此示例中的向量,则可以使用std ::配对,但是向量是要走的方法。我几个月都没有使用过数组。