专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > VC

CLR对C++/CLI类内跟踪句柄型字段的初始化策略是什么?解决办法

发布时间:2011-06-23 14:26:36 文章来源:www.iduyao.cn 采编人员:星星草
CLR对C++/CLI类内跟踪句柄型字段的初始化策略是什么?
我们都知道System::String是个引用类, 所以不得不使用跟踪句柄.
举一个简单的例子:
ABC类的定义,
C/C++ code

public ref class ABC
{
private: System::String^ str0;
private: System::String^ str1;
public: 
        ABC()
        {
                str0 = "ABCDEFG";
        }
    System::String^ GetStr()
    {
        return str1;
    }
};


执行代码,
C/C++ code

int main()
{
    ABC^ abc = gcnew ABC();
    Console::WriteLine(abc->GetStr());
    Console::Read();      // 仅为暂停控制台, 以便查看输出结果.
    return 0;
}


.
如上代码可以编译运行, 输出结果只有一个换行符.
以此例为基础我有一个问题:
对于ABC类的成员str1, 它在类内的声明就是个跟踪句柄String^, 虽然ABC的构造函数没有对它进行初始化, 但是由输出情况看, str1是可以被引用的. 这是否意味着, 对象abc被构造时, 在CLR堆上, 其跟踪句柄型成员str1被预留(reserve)了内存空间, 并且这块内存空间还被String的默认构造函数给初始化了? 若不是, 那实际情况是什么?

------解决方案--------------------
CLR上声明对象的时候会分配指针和同步块索引(好像是这个词)
在实例化(new)的时候分配成员的内存,并调用构造函数对其初始化;
如果类没有构造函数,会生成一个默认的构造函数。

------解决方案--------------------
不是

Class A {}

A a; 声明
a = new A();实例化
------解决方案--------------------
探讨
我们都知道System::String是个引用类, 所以不得不使用跟踪句柄.
举一个简单的例子:
ABC类的定义,
C/C++ code

public ref class ABC
{
private: System::String^ str0;
private: System::String^ str1;
public:
ABC(
{
……
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: