Я работаю над создателем и оператором присваивания для интеллектуального массива с использованием переменной ptr_
, которая указывает на первый элемент массива и size_
, который указывает на последний элемент массива. Я надеялся изменить свой старый проект, чтобы преобразовать его в ptr_
типа signed char*
вместо ptr_
с typename T*
, но я не уверен, как это сделать. Вот что у меня есть для оператора присваивания и конструктор копирования:Как создать оператор присваивания и конструктор копирования, используя глубокую копию?
template <typename T> class smart_array{
public:
//copy constructor
smart_array(const smart_array& A) : size_(A.size_{
if (size_ == 0) ptr_= nullptr;
else{
ptr_=new T[size_];
std::copy(A.ptr_, A.ptr_+ size_, ptr_);
}
}
//Assignment operator
smart_array& operator = (const smart_array& A) {
if (this == &A) return *this;
delete[ptr_];
size_ = A.size_;
if (size_==0) ptr_ = 0;
else{
ptr_ = new T[size_];
std::copy(A.ptr_, A.ptr_ + size_, ptr_)
}
return *this;
}
private:
int size_;
T* ptr_;
// Want ptr_ to be signed char* type
Почему бы не просто использовать 'std :: vector'? –
Почему бы просто не создать экземпляр шаблона с помощью 'T = signed char'? Я не понимаю, почему вы хотите «конвертировать» код – user463035818
Делает ли 'size_' количество байтов или элементов? Если 'ptr_' будет считаться с' char * 'и' size_' (как показывает ваш код), это приведет к ошибкам очень быстро. – Guvante