@FaulerAffe
-

Почему не изменяется значение в списке?

Нашёл в интернете вот такой прикол:
namespace Program
{
	static class MainClass
    {
		struct MyStrict //Простая структура
		{
			public int A;
			public void ClearA() //Самый обычный метод
			{
				A = 0; //поменяли A
			}
		}

		private static void Main()
		{
			List<MyStrict> list = new List<MyStrict>
			{
				new MyStrict() { A = 42 }
			};

			list[0].ClearA(); //Вызвали метод ClearA() - обнулили A, разве нет?
			Console.WriteLine(list[0].A); //Выведет 42
		}
	}
}


Набросал похожу программу на плюсах (список тоже в куче, а структура в стеке):
struct MyStrict
{
    int a;
    
    void clearA()
    {
        a = 0;
    }
};

int main()
{
    list<MyStrict>* l = new list<MyStrict>;
    MyStrict ms = {42};
    l->push_back(ms);
    cout << l->front().a; //42
    l->front().clearA();
    cout << l->front().a; //0
    
    return 0;
}

Результат другой. Я правильно понимаю, что в коде на шарпе оператор [] возвращает копию того, что было в нулевом элементе списка, в результате чего сам список не изменяется? А в коде на плюсах значение возвращается по ссылке (от функции front), вот мы и можем сразу изменить и это значение, и сам список?
  • Вопрос задан
  • 68 просмотров
Решения вопроса 1
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
структуры значимые данные, и возвращаются на стеке. сделайте A классом, и случится магия ;)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы