Create new C++ object at specific memory address?

后端 未结 5 1333
悲&欢浪女
悲&欢浪女 2020-11-30 00:32

Is it possible in C++ to create a new object at a specific memory location? I have a block of shared memory in which I would like to create an object. Is this possible?

相关标签:
5条回答
  • 2020-11-30 00:58

    On Windows, MapViewOfFileEx and VirtualAllocEx allow one to specify a preferred virtual address. No guarantees though.

    0 讨论(0)
  • 2020-11-30 01:00

    Assuming you have a pointer to the memory location you're wanting to place an object at, I believe one can cast the pointer to a new type and then place an object at the location of that pointer. This is a solution which doesn't require new().

    Given your memory:

    // you would use the pointer you have to your allocation of memory char* mem_start = new char[1024]; // Now we have 1024 bytes to play with

    One can cast it to a given type:

    CustomType* object_ptr = (CustomType*) mem_start;

    Lastly, you can construct an object there:

    *(object_ptr) = CustomType();

    0 讨论(0)
  • 2020-11-30 01:05

    You want placement new(). It basically calls the constructor using a block of existing memory instead of allocating new memory from the heap.

    Edit: make sure that you understand the note about being responsible for calling the destructor explicitly for objects created using placement new() before you use it!

    0 讨论(0)
  • 2020-11-30 01:11

    if you want to allocate a lot of fine-grained objects, the best approach will be to use placement new in conjunction with some sort of a ring buffer. otherwise, you will have to keep track of the pointers aside from the object pointers themselves.

    0 讨论(0)
  • 2020-11-30 01:18

    Yes. You need to use placement variant of operator new(). For example:

    void *pData = ....; // memory segment having enough space to store A object
    A *pA = new (pData) A;
    

    Please note that placement new does not throw exception.

    0 讨论(0)
提交回复
热议问题