.net c ++ / cli получить содержимое указателя - PullRequest
0 голосов
/ 05 января 2012

Я хочу узнать соответствующий следующий код в c ++ / cli

People* my_people = new People("name","lname");
People* second_people;
&second_people = &my_people;

//

People^  my_people = gcnew People("name","lname");
People^ second_people;
// what is this line?

На самом деле я хочу назначить содержимое my_people для second_people,Поэтому, когда я изменяю содержимое my_people, содержимое second_people должно быть таким же.

Ответы [ 2 ]

1 голос
/ 05 января 2012

Прежде всего, ваш первый кусок кода не компилируется и не имеет смысла.second_people не указывает ни на один объект, поэтому вы не можете назначить копию несуществующему объекту.Вместо этого вы должны написать

People* my_people = new People("name","lname");
People* second_people = new People(*my_people);

, предполагая, что вы уже реализовали Правило трех , как и должно быть.

Теперь вернемся к вопросу.Для C ++ / Cli вы также должны реализовать конструктор копирования и оператор присваивания, например

People(const People % other) { ... }
const People % operator = (const People % other) { ... ; return *this;}

И если мы применим это к вашему вопросу:

People^  my_people = gcnew People("name","lname");
People^ second_people = gcnew People(*my_people);
0 голосов
/ 05 января 2012

Вы можете просто присвоить my_people second_people следующим образом: second_people = my_people. Это потому, что вы все равно используете ссылки.

Вот полный пример:

using namespace System;

ref class People {
public:
    String^ name;
};

int main(array<System::String ^> ^args)
{
    People^ myPeople = gcnew People();
    People^ secondPeople = myPeople;
    myPeople->name = gcnew String(L"My People");
    Console::WriteLine(secondPeople->name);
    return 0;
}

Будет напечатано My People.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...