题解 | #数组类的构造函数#

数组类的构造函数

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删除。

全部评论

相关推荐

10-27 17:26
东北大学 Java
点赞 评论 收藏
分享
头像
11-21 11:39
四川大学 Java
是红鸢啊:忘了还没结束,还有字节的5k 违约金
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务