本文共 1906 字,大约阅读时间需要 6 分钟。
C /CLI中使用gcnew关键字表示在托管堆上分配内存,并且为了和以前的指针区分,用^来替换* ,就语义上来说他们的区别大致如下:
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] |
转载地址:http://qdemi.baihongyu.com/