gpt4 book ai didi

c++ - 关于编写具有相同指针数组的类的代码中的错误?

转载 作者:行者123 更新时间:2023-11-30 02:56:13 25 4
gpt4 key购买 nike

<分区>

大家好我有下面的代码
PointArray.h

#ifndef POINTARRAY_H_INCLUDED
#define POINTARRAY_H_INCLUDED

template <typename T>
class PointArray
{
private:
int nSize;
T *array[];
public:
PointArray();
PointArray(const T *points[],const int size);
PointArray(const PointArray &pv);
~PointArray();
int * get(const int position);//is same to array[position]
const int * get(const int position) const;//is same to array[position]
const int getSize() const;//get size of array
};

#endif // POINTARRAY_H_INCLUDED

PointArray.cpp

#include "PointArray.h"
#include<iostream>
#include <assert.h>
using namespace std;

template<class T>
PointArray<T>::PointArray(const T *points[],const int size)
{
nSize=size;
for (int i=0;i<size;i++)
{
array[i]=new T;
*array[i]=*points[i];
}
}

template<class T>
PointArray<T>::PointArray()
{
nSize=0;
}

template<class T>
PointArray<T>::PointArray(const PointArray &pv)
{
nSize=pv.getSize();
for (int i=0;i<nSize;i++)
{
array[i]=new T;
*array[i]=*(pv.get(i));
}
}

template<class T>
const int PointArray<T>::getSize() const
{
return nSize;
}

template<class T>
PointArray<T>::~PointArray()
{
delete[] array;
nSize=0;
}

template<class T>
int * PointArray<T>::get(const int position)
{
assert(position>-1 && position<nSize);
return array[position];
}

template<class T>
const int * PointArray<T>::get(const int position) const
{
return array[position];
}

main.cpp

#include<iostream>
#include "PointArray.h"
#include "PointArray.cpp"
using namespace std;

int main()
{
int x=22;
int y=3;
const int * a[2]={&x,&y};
PointArray<int> p;
PointArray<int> p2(a,2);
PointArray<int> p3(p2);
cout << p.getSize() << endl;
cout << p2.getSize() << endl;
cout << p3.getSize() << endl;
return 0;
}

上面的代码应该打印出来

0
2
2

但是输出是

9244616
9244600
2

当我再次运行 9244616 时,9244600 已更改。
有什么问题?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com