Всем привет есть 2 вопроса:
Почему в аргументах функции calc приходится писать именно ссылку на указатель Test *& test, а не Test * test?
#include <iostream>
using namespace std;
struct Test
{
int a;
int b;
};
**// Эта функция будет в dll**
void calc(Test *& test, unsigned int &sizeTest)
{
sizeTest = 3;
test = new Test[sizeTest];
for (uint i = 0; i < sizeTest; i++)
{
test[i].a = i;
test[i].b = i;
}
}
int main()
{
Test *test = NULL;
unsigned int sizeTest = 0;
calc(test, sizeTest);
cout << sizeTest << endl;
for (uint i = 0; i < sizeTest; i++)
{
cout << test[i].a << endl;
cout << test[i].b << endl;
}
// Корректно ли тут очищать память, выделенную в другой функции?
delete[] test;
return 0;
}
Без ссылок ваша функция выглядела бы так:
void calc(Test ** test, uint * sizeTest)
{
*sizeTest = 3;
*test = new Test[*sizeTest];
for (uint i = 0; i < *sizeTest; i++)
{
(*test)[i].a = i;
(*test)[i].b = i;
}
}
// использование
Test * array = nullptr;
uint size = 0;
calc(&array, &size);
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости