这将是一个非常愚蠢的问题,但可以在C++/CLI中执行以下操作吗?如何在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);
}
,使得之后,从主,主:: d和f.m_data调用f.bar(5)是相同的 “重新分配” 数组?我试过非托管引用,指针,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;
}
但我传递的参考是跟踪/参考。比如,我应该在构造函数中调整数组的大小,而main中的数组也会被修改。 – Anzurio 2010-01-07 04:07:48
但是CLR不支持by-ref成员。 (我应该更新我的答案来说这个,而不是“引用是按值传递的。”)m_data是一个普通的旧引用,而不是对引用的引用:对引用的引用只与传入它的行为有关,脱离构造函数方法。 – itowlson 2010-01-07 04:14:22
我已经更新了答案,希望能够更清楚地了解参考成为“独立副本”的时间。对不起,原来是误导。 – itowlson 2010-01-07 04:17:56