voi*_*ter 6 managed-c++ c++-cli managed visual-studio-2015
从 Visual Studio 2013 跳转到 Visual Studio 2015,我注意到编译器接受托管 C++ 类中的静态自实例的方式存在一些差异。考虑这两个例子:
方法一:
public ref class CResourceManager
{
public:
static property CResourceManager^ Instance
{
CResourceManager^ get() { return %m_Instance; }
}
private:
static CResourceManager m_Instance;
};
Run Code Online (Sandbox Code Playgroud)
方法二:
public ref class CResourceManager
{
public:
static property CResourceManager^ Instance
{
CResourceManager^ get() { return m_Instance; }
}
private:
static CResourceManager^ m_Instance = gcnew CResourceManager;
};
Run Code Online (Sandbox Code Playgroud)
方法 1 曾经在 2013 年工作,但在 2015 年无法编译。不幸的是,我手头没有确切的编译器错误,但它是“变量名前缺少分号”错误之一,基本上是说它找不到类型CResourceManager(指向静态变量声明)。
接下来是我的问题:
方法2是正确的方法。您列出的代码等效于 C# 习惯用法。
方法1有点不寻常。
^声明中缺少 a通常意味着变量未在托管堆上分配。然而,由于它是一个静态类成员,我不确定它实际上是在哪里创建的。%通常用于声明跟踪引用,相当于通过C#ref或out在 C#中传递变量。老实说,我不认为在%没有^or 的情况下应用于变量%并将结果作为 a^甚至有效。(虽然考虑到 2015 编译器拒绝它,但它可能不是。)即使方法一是有效的,我还是会选择方法二:存储位置m_Instance和返回方式都简单明了、通用且易于理解。这比任何一天都必须考虑代码如何工作好。
| 归档时间: |
|
| 查看次数: |
2832 次 |
| 最近记录: |