The syntax for stack versus heap allocation of C++, C++/CLI and CSharp

 

The syntax for stack versus heap allocation of C++, C++/CLI and CSharp

Native C++ lets you choose where to create a given object.Any type can be allocated on the stack or the CRT heap.

// allocated on the stack

std::wstring stackObject;

// allocated on the CRT heap

std::wstring* heapObject = new std::wstring;

As you can see, the choice of where to allocate the objectis independent of the type, and is totally in the hands of the programmer. Inaddition, the syntax for stack versus heap allocation is distinctive.

 

C#, on the other hand, lets you create value types on thestack and reference types on the heap. The System.DateTime type, used in thenext few examples, is declared a value type by its author.

// allocated on the stack

System.DateTime stackObject = new System.DateTime(2003, 1,18);

// allocated on the managed heap

System.IO.MemoryStream heapObject = new System.IO.MemoryStream();

As you can see, nothing about the way you declare the object gives any hint at whether the object is on the stack or the heap. That choiceis left completely up to the type's author and the runtime.

 

C++/CLI's way (distinctive):

// allocated on the stack

DateTime stackObject(2003, 1, 18);

// allocated on the managed heap

IO::MemoryStream^ heapObject = gcnew IO::MemoryStream;

Again, there is nothing surprising about the declaration of the value type. The reference type, however, is distinctive. The ^ operatordeclares the variable as a handle to a CLR reference type. Handles track,meaning the handle's value is automatically updated by the garbage collector asthe object to which it refers, is moved in memory. In addition, they are rebindable, which allows them to point to a different object, just like a C++pointer. The other thing you should notice is the gcnew operator that is used in place of the new operator. This clearly indicates that the object is being allocated on the managed heap. The new operator is no longer overloaded (no punintended) for managed types, and will only allocate objects on the CRT heap,unless of course you provide your own operator new. Don't you just love C++!

That is object construction in a nutshell: Native C++pointers are clearly distinguished from CLR object references.

 

转载于:https://www.cnblogs.com/taoxu0903/archive/2010/03/10/1682438.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值