我在使用new放置连续内存时遇到了一些问题。如果还有其他方法可以使用,请指导我。
请参考我的代码。

#include <new>
//================================================
class MyClass
{
 private:
    int ma;
 public:
    MyClass():ma(-1){}
};
//===========================================

int main()
{
    // I am allocating the memory for holding 10 elements of MyClass on heap
    void* pMyClass = ::operator new(sizeof(MyClass)*10);

    //! Note :: the address of pMyClass1 and pMyClass will now point to same
    //location after calling placement new

    MyClass* pMyClass1 = :: new(pMyClass)MyClass();

    //! Problem with this is that,
    //! i can only instantiate the constructor for the  base address. That is
    //!  pMyClass[0].
    //! If i have to instantiate it for all the other instances,
    //! that is pMyClass[1] to pMyClass[9], then how to do it ?
    return 0;
}

最佳答案

您在pMyClass中拥有内存的开始位置,跨度为sizeof(MyClass)。因此,您需要做的是例如:

MyClass* pMyClass2 = ::new((MyClass*)pMyClass + 1)MyClass();

09-08 09:26