如何在 C++/CLI 中设置 non-pointed object 的 属性
How to set a property of a non-pointed object in C++/CLI
这是 C++/CLI 中 class 和 属性 的 header:
public ref class MyClass
{
public:
property double x
{
double get();
void set(double value);
}
MyClass();
}
如果我使用指针实例化 object 我可以像这样设置 x
属性 :
MyClass^ obj = gcnew MyClass();
obj->x = 10.0;
如果我没有使用指针,那么我有一个编译错误
(C2228:'.x' 的左侧必须有 class/struct/union)使用此代码:
MyClass obj();
obj.x = 10.0;
第二个例子怎么办?
此语法问题是否特定于属性或 non-pointed object 的任何成员?
第二种语法称为堆栈语义。当变量超出范围时,它会创建对象并 "destroys" 它。
其实不是释放内存,而是对象调用了Dispose
因此使用句点而不是指针运算符的第二种语法 -> 仅是具有堆栈语义的有效 vor 对象。
你刚刚被 most vexing parse 困住了:
MyClass obj();
这个没有定义类型MyClass
的变量obj
。如果声明一个不带参数的 函数 obj
和 returns MyClass
.
只写这个:
MyClass obj;
obj.x = 10.0;
或者这样:
MyClass obj{};
obj.x = 10.0;
两者都编译得很好。
obj
使用 stack semantics 尽管 MyClass
没有实现 IDisposable
(即在 C++/CLI 中没有 ~MyClass
成员)。
这是 C++/CLI 中 class 和 属性 的 header:
public ref class MyClass
{
public:
property double x
{
double get();
void set(double value);
}
MyClass();
}
如果我使用指针实例化 object 我可以像这样设置 x
属性 :
MyClass^ obj = gcnew MyClass();
obj->x = 10.0;
如果我没有使用指针,那么我有一个编译错误 (C2228:'.x' 的左侧必须有 class/struct/union)使用此代码:
MyClass obj();
obj.x = 10.0;
第二个例子怎么办?
此语法问题是否特定于属性或 non-pointed object 的任何成员?
第二种语法称为堆栈语义。当变量超出范围时,它会创建对象并 "destroys" 它。
其实不是释放内存,而是对象调用了Dispose
因此使用句点而不是指针运算符的第二种语法 -> 仅是具有堆栈语义的有效 vor 对象。
你刚刚被 most vexing parse 困住了:
MyClass obj();
这个没有定义类型MyClass
的变量obj
。如果声明一个不带参数的 函数 obj
和 returns MyClass
.
只写这个:
MyClass obj;
obj.x = 10.0;
或者这样:
MyClass obj{};
obj.x = 10.0;
两者都编译得很好。
obj
使用 stack semantics 尽管 MyClass
没有实现 IDisposable
(即在 C++/CLI 中没有 ~MyClass
成员)。