zoukankan      html  css  js  c++  java
  • 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.

  • 相关阅读:
    iOS UITextField 设置内边距
    在网页中嵌入任意字体的解决方案
    基数等比,确定进制
    改善CSS编码的5个在线幻灯片教程
    head区的代码详解
    一个简单的、循序渐进的CSS幻灯片教程
    功能强大易用的Web视频播放器——Flowplayer(使用方法及演示)
    CSS:区分IE版本的三个方法
    CSS书写标准及最佳实践
    Sliding Photograph Galleries
  • 原文地址:https://www.cnblogs.com/taoxu0903/p/1682438.html
Copyright © 2011-2022 走看看