Kopia obiektu - dlaczego adres też jest kopiowany?

0

Witam, mam problem z kopiowaniem obiektu swojej klasy - razem ze zmiennymi kopiuje się też adres (sprawdzałem w debuggerze), mimo że nie jest to wskaźnik. Przez to każda kopia zachowuje się jak referencja do oryginału. To samo jest w przypadku wstawiania obiektu do wektora.

void add(Table &object) {
	Table copyTable; // nowy adres
	copyTable = refTable; // adres copyTable  = adres refTable (wskazuja na to samo)
	(*List).insert(std::move(copyTable)); // ten sam adres co copyTable
}

List jest wskaźnikiem do wektora obiektów Table. Zarys Table:

class Table
{
	public:
		Table(const std::string&);
		Table();
		~Table();

		struct ColumnFunctions
		{
			public:
				struct Column {
					const std::string name;
					std::vector<std::string> row;
					Column() {}
					Column(const std::string& name_m) : name(name_m) {}
				}
		};

		std::string name;
		ColumnFunctions column;
};
0

Ten kod nie ma prawa się skompilować, bo masz dwie zmienne o tej samej nazwie. Przygotuj MCVE: https://dsp.krzaq.cc/post/445/jak-zadawac-pytania-na-forum/

0
ranger281 napisał(a):
void add(Table &object) {
	Table copyTable; // nowy adres
	copyTable = refTable; // adres copyTable  = adres refTable (wskazuja na to samo)
	(*List).insert(std::move(copyTable)); // ten sam adres co copyTable
}

Czym jest refTable i po co przekazujesz object skoro go nie używasz?

0
void add(Table &object) {
    Table copyTable; // nowy adres
    copyTable = object; // adres copyTable  = adres refTable (wskazuja na to samo)
    (*List).insert(std::move(copyTable)); // ten sam adres co copyTable
}

Tak to powinno wyglądać. Błąd przy przepisywaniu.

0
ranger281 napisał(a):

List jest wskaźnikiem do wektora obiektów Table

Skoro List jest wektorem to takie wywołanie insert(std::move(copyTable)) jest niepoprawne.

Nie możesz tego zwyczajnie zrobić z push_back?

void add(const Table& object)
{
  (*List).push_back(object);
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1