Это будет очень глупый вопрос, но возможно ли сделать следующее в C ++ / CLI?
// C++/CLI
public ref class Managed
{
public:
array<double>^ m_data;
Managed(array<double>^% data) : m_data(data)
{
}
void bar(int x)
{
System::Array::Resize(m_data, x);
}
};
// C#
static void Main(string[] args)
{
double [] d = new double[10];
Foo.Managed f = new Foo.Managed(d);
f.bar(5);
}
Так, что после вызова f.bar (5) из Main, Main :: d и f.m_data - это один и тот же «перераспределенный» массив? Я пробовал с неуправляемыми ссылками, указателями, pin_ptr и т. Д., Но ничего. Есть идеи? Если это просто невозможно, есть ли причина?
Используя оператор отслеживания ссылок (%), я мог бы сделать это, если бы я изменил размер в конструкторе, это то, что заставило меня пытаться.
Это возможно в C ++ с использованием ссылок, к сожалению, я не знаю, как преобразовать массив ^ в массив ^, и я не могу использовать массив ^% в качестве члена:
class Foo{
public:
double *& m_data;
Foo(double*& data): m_data(data)
{
}
void bar(int x)
{
delete m_data;
m_data = new double[x];
}
~Foo(){
delete [] m_data;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
double* data = new double[10];
Foo f(data);
std::cout << &data << "\n" << &f.m_data << "\n";
f.bar(5);
std::cout << &data << "\n" << &f.m_data;
getchar();
return 0;
}