간단 한 배열 클래스 Array

2920 단어 c테스트deleteini
#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 이 고 주소 도 이전 과 같 습 니 다.?
개인 적 으로 마지막 출력 은 불확실 한 값 이 어야 한다 고 생각 합 니 다...

좋은 웹페이지 즐겨찾기