题解 | #数组类的构造函数#
数组类的构造函数
https://www.nowcoder.com/practice/1f36f85726474afbb103f65a24106824
#include<bits/stdc++.h> using namespace std; class Array{ private: int n;//数组大小 int *a;//数组 public: // write your code here...... Array(int n,int* arr){ this->n=n; this->a=arr; } ~Array(){ delete []a; } void show(){ for (int i=0;i<n;i++) cout<<a[i]<<' '; } }; int main(){ int n; cin>>n; int *arr=new int[n]; for(int i=0;i<n;i++){ cin>>arr[i]; } Array a(n,arr); a.show(); return 0; }
直接int arr[n]会在main函数栈中分配内存,这一块内存虽然可以被类的构造函数访问。但是栈上分配的空间是不能被delete []的。
解决方法1、就是动态的为arr分配一个空间在堆上。(这样会导致main函数栈上的arr指针悬空)2、在类中为*a动态分配一个空间,然后将堆上的数据一一复制过来。3、将Array类中的析构函数的delete删除。