Здравствуйте, у меня есть эта проблема, у меня есть объект 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, всегда ли это глубокая копия?
Привет, Брайан