如何在C ++ / CLI中设置非指向对象的属性

时间:2017-01-10 10:42:24

标签: pointers c++-cli

以下是具有C ++ / CLI属性的类的标题:

    public ref class MyClass
    {
       public:
         property double x
         {
            double get();
            void set(double value);
         }

         MyClass();
     }

如果我使用指针实例化对象,我可以像这样设置x属性:

MyClass^ obj = gcnew MyClass();
obj->x = 10.0;

如果我不使用指针,那么我有一个编译错误 (C2228:'。x'的左边必须有class / struct / union)使用以下代码:

MyClass obj();
obj.x = 10.0; 

我应该为第二个例子做些什么?

此语法问题是特定于属性还是特定于非指向对象的任何成员?

2 个答案:

答案 0 :(得分:4)

你刚刚被most vexing parse

困住了
MyClass obj();

定义obj类型的变量MyClass。如果声明函数 obj不带参数并返回MyClass

只需写下来:

MyClass obj;
obj.x = 10.0;

或者这个:

MyClass obj{};
obj.x = 10.0;

两者都编译得很好。

obj使用stack semantics尽管MyClass没有实现IDisposable(即在C ++ / CLI中没有~MyClass成员)。

答案 1 :(得分:0)

第二种语法称为堆栈语义。它创造了对象并且"破坏"它,当变量超出范围时。

实际上并没有释放内存,而是为对象调用Dispose。

所以使用句点而不是指针运算符的第二种语法 - >只是具有堆栈语义的有效vor对象。

另见https://msdn.microsoft.com/en-us/library/ms177191.aspx