C ++ Получить объект из массива как глубокую копию - PullRequest
0 голосов
/ 21 июня 2020

Здравствуйте, у меня есть эта проблема, у меня есть объект StringArray с переменной-членом _contents [], где хранятся объекты класса String. Теперь я хочу получить, например, объект String в местоположении _contents [0].

String.h

#include <utility>

class StringArray;

class String {
 public:
   String();
   ~String();
   String(const String& s);
   void set(const char* s);

 private:
   char* _contents;
   size_t _length;
   int _objectId;
};

class StringArray {
 public:
   StringArray();
   ~StringArray();
   void setSize(int n);
   int size();
   String get(int position);
   void set(int position, String s);

 private:
   String* _contents;
   
};

String. cpp

#include "./String.h"
#include <cstddef>
#include <stdio.h>
#include <string.h>

int String::_numObjects = 0;

String::String() {
  _contents = new char[1];
  _contents[0] = 0;
  _length = 0;
  _numObjects++;
}

String::~String() {
  // delete [] _contents;
}

String::String(const String &s) {
  _length = s._length;
  _contents = new char[_length + 1];
  for (size_t i = 0; i <= _length; i++) {
    _contents[i] = s._contents[i];
    _numObjects++;
    _objectId = _numObjects;
  }
}

void String::set(const char *s) {
  size_t n = strlen(s);
  delete[] _contents;
  _contents = new char[n + 1];
  for (size_t i = 0; i <= n; i++) {
    _contents[i] = s[i];
    _length = n;
  }
}


StringArray::StringArray() {
  _contents = nullptr;
  _size = 0;
}

StringArray::~StringArray() {
  // delete [] _contents;
}

void StringArray::setSize(int n) {
  _size = n;
  delete[] _contents;
  _contents = new String[n];

}

String StringArray::get(int position) {

  return _contents[position];
}
void StringArray::set(int position, String s) { _contents[position] = s; }

StringMain. cpp

#include "./String.h"
#include <cstdio>


int main(int argc, char** argv) {
    StringArray array;
    array.setSize(1);

    String s0;
    s0.set("Doof");
    array.set(0, s0);

    String sa0 = array.get(0);
}

Проблема в том, что String sa0 является лишь поверхностной копией или указателем на array._contents [position], как мне это изменить? И когда я что-то добавляю в Memberarray _contens объекта Arrayclass, всегда ли это глубокая копия?

Привет, Брайан

...