1

テンプレートを使用してクラス「ベクター」の独自の実装を実践しています。Copy コンストラクターとオーバーロードされた = 演算子を除いて、すべてが機能しているようです。問題がどこにあるのか正確にはわかりません。ソースコード全体を以下に投稿します:(また、リークがあるかどうかもわかりません)

#include <iostream>
#include <string>
using namespace std;

template <typename TT1>
class Vector{
private:
    int size;
    TT1* ptr;
public:
    Vector();
    ~Vector();
    Vector(int size);
    Vector(const Vector& a);
    Vector<TT1>& operator=(const Vector& a);
    void set(int position, TT1 data);
    TT1 get(int position);
    int get_size();
};

//------Default Constructor------
template <typename TT1>
Vector<TT1> :: Vector()
{
    size = 0;
    ptr = NULL;
}

//-------Copy Constructor-------
template <typename TT1>
Vector<TT1> :: Vector(const Vector<TT1>& a)
{
    if(a.ptr != NULL)
    {
        this->size = a.size;
        delete[] ptr;
        ptr = new TT1[size];
        for ( int i = 0; i < this->size; i++)
                this->ptr[i] = a.ptr[i];
    }
}

//------Destructor-------
template <typename TT1>
Vector<TT1> :: ~Vector()
{
    delete[] ptr;
}

//-----Overloaded = operator----
template <typename TT1>
Vector<TT1>& Vector<TT1> :: operator=(const Vector<TT1>& a)
{
    if(this != &a)
    {
        this->size = a.size;
        delete[] this->ptr;
        this->ptr = new TT1[a.size];
        for (unsigned int i = 0; i < this->size; i++)
                this->ptr[i] = a.ptr[i];
        return *this;
    }
}
//----Constructor with size---
template<typename TT1>
Vector<TT1> :: Vector(int size)
{
    this->size = size;
    ptr = new TT1[size];
}

//---- Set data @ Poisition----
template<typename TT1>
void Vector<TT1> :: set(int position, TT1 data)
{
    *(ptr+ position) = data;
}

//----Get data From position----
template<typename TT1>
TT1 Vector<TT1> :: get(int position)
{
    return *(ptr + position);
}

//-----Get size----
template<typename TT1>
int Vector<TT1> :: get_size()
{
    return size;
}

void foo(Vector<string> a)
{

}

int main()
{
    Vector<string> a(3);
    a.set(0, "asd");
    a.set(2, "hjk");
    a.set(1, "34645!");
    for(int i = 0; i < a.get_size(); i++)
    {
        cout << a.get(i) << endl;
    }
    Vector<string> b = a;
    for(int i = 0; i < a.get_size(); i++)
    {
        cout << b.get(i) << endl;
    }
    foo(a);

    return 0;
}

そして今、間違いがある部分:

template <typename TT1>
Vector<TT1> :: Vector(const Vector<TT1>& a)
{
    if(a.ptr != NULL)
    {
        this->size = a.size;
        delete[] ptr;
        ptr = new TT1[size];
        for ( int i = 0; i < this->size; i++)
                this->ptr[i] = a.ptr[i];
    }
}

そして最後にここに:

//-----Overloaded = operator----
template <typename TT1>
Vector<TT1>& Vector<TT1> :: operator=(const Vector<TT1>& a)
{
    if(this != &a)
    {
        this->size = a.size;
        delete[] this->ptr;
        this->ptr = new TT1[a.size];
        for (unsigned int i = 0; i < this->size; i++)
                this->ptr[i] = a.ptr[i];
        return *this;
    }
4

1 に答える 1