간단 한 배열 클래스 Array
#include<iostream>
#include<stdexcept>
using namespace std;
template<typename T>
class Array
{
public:
Array():data(0),sz(0)
{
}
Array(unsigned int size):sz(size),data(new T[size])
{
}
~Array()
{
cout<<"Destructor()"<<endl;
delete []data;
data=0;
}
const T& operator[](unsigned int idx) const
{
if(idx>=idx){
throw out_of_range("Array subscript out fo range const");
}
else if(data==0){
throw out_of_range("data==0 const");
}
return data[idx];
}
T& operator[](unsigned int idx)
{
if(idx>=sz){
throw out_of_range("Array subscript out of range");
}
else if(data==0){
throw out_of_range("data==0");
}
return data[idx];
}
operator const T* ()const
{
return data;
}
operator T* ()
{
return data;
}
private:
T* data;
unsigned int sz;
Array(const Array&);
Array& operator=(const Array&);
};
#define N 100
int main()
{
/*
Array<int> t(N);
for(unsigned int i=0;i<N;i++)
{
try{
t[i] = i;
}
catch(...){
cout<<"error"<<endl;
exit(-1);
}
}
for(int i=N-1;i>=0;i--)
{
try{
unsigned int idx = (unsigned int)i;
cout<<t[idx]<<"\t";
}
catch(out_of_range e)
{
cout<<endl;
cout<<i<<endl;
cout<<e.what()<<endl;
exit(-1);
}
}
cout<<endl;
int *p = t+10;
cout<<*p<<endl;
*/
{
cout<<"=============test=========="<<endl;
int *pp=0;
cout<<pp<<endl;
{
Array<int> tt(20);
unsigned x = 10;
tt[x] = 100;
pp = &tt[x];
cout<<*pp<<"\t"<<pp<<endl; //100 a
}
cout<<*pp<<"\t"<<pp<<endl; //100 a
//cout<<tt[x]<<endl;
}
return 0;
}
이 안 에는 c + + 사색 록 에서 토론 한 것 과 다른 문제 가 있 습 니 다. 바로 뒤의 테스트 입 니 다. 느낌 이 이상 합 니 다. 대 협 에 게 설명 을 구 합 니 다.
현상 은:
주석 이 없 는 테스트 부분 에서 tt 가 역할 영역 을 초과 할 때 대상 은 이미 분석 (폐기) 되 었 으 나 * pp 의 출력 값 은 100 이 고 주소 도 이전 과 같 습 니 다.?
개인 적 으로 마지막 출력 은 불확실 한 값 이 어야 한다 고 생각 합 니 다...
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Docker를 사용한 React 및 .NET Core 6.0 샘플 프로젝트 - 1부이 기사에서는 Entity Framework Core Code First 접근 방식을 사용하는 ASP.NET Core 6.0 WEP API의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업에 대해 설명합니다. 웹 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.