Как назначить адрес структуры другой структуре?
Допустим, у меня есть
struct someStruct
{
int a;
};
и 2 класса.
В методе первого класса я создаю экземпляр структуры:
someStruct structName;
Теперь я хочу передать адрес этой структуры в конструктор другого класса
std::auto_ptr<2ndClass> 2ndClass_ (new 2ndClass(structName));
Я хочу использовать значения структуры, измененные в 2ndClass здесь - читайте ниже...
Второй класс имеет:
заголовок:
...
class 2ndClass...
...
private:
someStruct &structName2;
public:
__fastcall 2ndClass(someStruct &structName);
...
каст:
__fastcall 2ndClass::2ndClass(someStruct &structName)
: structName2(structName)
{
...
Это, очевидно, делает копию structName.
Мой вопрос: как я могу назначить адрес structName2 из structName, чтобы я мог читать и записывать в структуру, а затем использовать эти значения в первом классе после выхода из второго класса? Как я могу сделать это без использования указателей на структуру?
1 ответ
Это делает копию structName.
Нет, это не так. Вы передаете по ссылке, а ваш участник является ссылкой, поэтому 2ndClass::structName2
будет ссылаться на точный объект, который вы передаете в качестве параметра конструктору.
Вопрос в том, как назначить адрес structName2 из structName, чтобы я мог читать и записывать в структуру, а затем использовать эти значения в первом классе после выхода из второго класса.
Вам не нужно, так как вы работаете со ссылками. В функции подписи, &
обозначает ссылку, а не адрес. Таким образом, вы не передаете адрес, а сам объект.
Обратите внимание, что если исходная структура выходит из области видимости, у вас будет свисающая ссылка, поэтому обязательно рассмотрите этот случай. Может показаться, что работает, если память не перезаписана, но это неопределенное поведение.