浅议C /CLI的gcnew关键字
http://west263.com/info/html/chengxusheji/C-C--/20080224/9240.html
1. gcnew返回的是个句柄(Handle),而new返回的是实际的内存地址.
2. gcnew创建的对象由虚拟机托管,而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;
}
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系
我把调试的时候JIT编译的汇编代码择录了部分如下显示(请注意红色部分):
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;
相关文档:
用过vista的朋友都知道 vista不知由于什么原因很多编译软件都不能正常工作了 vs6.0全部都说有已知的兼容性问题存在
当然你可以装好几个g的vs2005
寡人一直都想自学一门计算机语言
但是苦于找不到编译器
连最简单的hellowold都不能正常编译
汗
不多说
看我弄得
总算能用了
1.下载MinGW
http://sourceforge.net/pro ......
C的static的用法:
1.对于函数里的局部变量,改变的是它的生存周期,这个变量会一直存在,到程序结束. 函数外部访问不到这个变量.
2.对于全局的变量,改变的是它的作用范围,这个变量只在本文件内有效.其它的.c文件看不到.
当然它的生命周期是和程序一样的 ......
转
载自http://www.builder.com.cn/
static
是c++中很常用的修饰符,它被用来控制变量的存储方式和可见性,下面我将从 static 修饰符的产生原因、作用谈起,全面分析static
修饰符的实质。
static 的两大作用:
一、控制存储方式:
static被引入以告知编译器,将变 ......
做到专业,应该是每个职业程序员应该要求自己做到的。
让我们看看lua
是
怎么写头文件的。
1.License Agreement
License
Agreement
应该加在每个头文件的顶部。
Lua Sample:
/*
** $Id: lua.h,v 1.175b 2003/03/18 12:31:39 roberto Exp $
** Lua - An ......