корректен ли данный код ?
ref struct data1_t
{
String^ field1;
String^ field2;
int field3;
};
List<data1_t^>^ test()
{
auto list = gcnew List<data1_t^>;
for (int i = 0; i < 5; i++)
{
data1_t d;
d.field1 = "key" + i.ToString();
d.field2 = "value" + i.ToString();
d.field3 = 0xbaddcafe + i;
list->Add(%d);
}
return list;
}
int main(array<System::String ^> ^args)
{
for each (data1_t^ d in test())
{
Console::WriteLine("{0} {1} {2:x}", d->field1, d->field2, d->field3);
}
return 0;
}
вот мои размышления
во первых ref class/struct всегда распологаются в managed куче поэтому даже в этом
случае при использовании stack semantic для data1_t объект создается в куче и можно смело
взять его адрес и засунуть в список ссылок...
но при использовании семантики стека всегда вызывается dispose если он определен и
разрушает объект и может оказаться так что ссылка будет указывать на уже разрушенный объект
хотя память из под объекта удалена не будет пока существует ссылка в списке хендлов
тоесть к чему я веду правильно ли я понимаю что вообще такое использование некорректно так как
мы достоверно не знаем определен ли метод dispose в некоем типе но в данном случае так как dispose
не определен то код вполне корректный ?
спасибо