Как назначить адрес структуры другой структуре?

Допустим, у меня есть

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, чтобы я мог читать и записывать в структуру, а затем использовать эти значения в первом классе после выхода из второго класса.

Вам не нужно, так как вы работаете со ссылками. В функции подписи, & обозначает ссылку, а не адрес. Таким образом, вы не передаете адрес, а сам объект.

Обратите внимание, что если исходная структура выходит из области видимости, у вас будет свисающая ссылка, поэтому обязательно рассмотрите этот случай. Может показаться, что работает, если память не перезаписана, но это неопределенное поведение.

Другие вопросы по тегам