浅议C /CLI的gcnew关键字
2008-02-23 05:05:25来源:互联网 阅读 ()
C /CLI中使用gcnew关键字表示在托管堆上分配内存,并且为了和以前的指针区分,用^来替换* ,就语义上来说他们的区别大致如下:
1. gcnew返回的是个句柄(Handle),而new返回的是实际的内存地址.
using namespace System;
ref class Foo
{
public:
Foo()
{
System::Console::WriteLine("Foo::Foo");
}
~Foo()
{
System::Console::WriteLine("Foo::~Foo");
}
public:
int m_iValue;
};
int _tmain()
{
int* pInt = new int;
int^ rInt = gcnew int;
Foo^ rFoo = gcnew Foo;
delete rFoo;
delete rInt;
delete pInt;
} |
int* pInt = new int;
0000004c mov ecx,4
00000051 call dword ptr ds:[03B51554h]
00000057 mov esi,eax
00000059 mov dword ptr [esp 18h],esi
int^ rInt = gcnew int;
0000005d mov ecx,788EF9D8h
00000062 call FCFAF66C
00000067 mov esi,eax
00000069 mov dword ptr [esi 4],0
00000070 mov edi,esi
Foo^ rFoo = gcnew Foo;
00000072 mov ecx,3B51768h
00000077 call FCFAF66C
0000007c mov esi,eax
0000007e mov ecx,esi
00000080 call dword ptr ds:[03B517ACh]
00000086 mov dword ptr [esp 1Ch],esi
delete rFoo;
0000008a mov ebx,dword ptr [esp 1Ch]
0000008e test ebx,ebx
00000090 je 000000A4
00000092 mov ecx,ebx
00000094 call dword ptr ds:[03FD0028h]
0000009a mov dword ptr [esp 14h],0
000000a2 jmp 000000AC
000000a4 mov dword ptr [esp 14h],0
delete rInt;
000000ac mov edx,edi
000000ae mov ecx,788F747Ch
000000b3 call FC8D20FD
000000b8 mov ebp,eax
000000ba test ebp,ebp
000000bc je 000000D0
000000be mov ecx,ebp
000000c0 call dword ptr ds:[03FD0020h]
000000c6 mov dword ptr [esp 10h],0
000000ce jmp 000000D8
000000d0 mov dword ptr [esp 10h],0
delete pInt;
000000d8 mov ecx,dword ptr [esp 18h]
000000dc call dword ptr ds:[03B51540h]
|
int* pInt = new int;
0000004c mov ecx,4
00000051 call dword ptr ds:[03B51554h] |
能够看到,和以前在vc6中相同,分配内存的步骤如下:
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: C /CLI中栈对象的设计问题
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash