我在使用新的连续内存时遇到了一些问题。如果还有其他方法可以指导我。请指导我。
请参考我的代码。
#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;
}
答案 0 :(得分:1)
你在pMyClass中有内存的开头,而stride是sizeof(MyClass)。所以,你需要做的是例如:
MyClass* pMyClass2 = ::new((MyClass*)pMyClass + 1)MyClass();
答案 1 :(得分:0)
你必须在循环中调用placement new,迭代10个连续的内存块:
int main()
{
void* pMyClass = ::operator new(sizeof(MyClass)*10);
MyClass* pMyClass1 = reinterpret_cast<MyClass*>(pMyClass);
for (size_t i=0; i<10; ++i) {
::new(pMyClass1++)MyClass();
}
// ...
}
答案 2 :(得分:0)
尝试:
MyClass* pMyClass1 = :: new(pMyClass)MyClass[10];