【发布时间】:2011-05-20 09:54:29
【问题描述】:
如果我没有修改参数构造函数中的任何static 变量,是否低于模拟new T[N] (x,y);(带参数的新数组)的正确方法?
template<typename T>
void* operator new [] (size_t size, const T &value)
{
T* p = (T*) malloc(size);
for(int i = size / sizeof(T) - 1; i >= 0; i--)
memcpy(p + i, &value, sizeof(T));
return p;
}
使用会,
struct A
{
A () {} // default
A (int i, int j) {} // with arguments
};
int main ()
{
A *p = new(A(1,2)) A[10]; // instead of new A[10](1,2)
}
【问题讨论】:
-
你可以通过传入
const T& value而不是T value来避免一些复制 -
T value ... memcpy(..., &value, ...);肯定不是一个好主意。 -
我认为这种方法完全错误。 new 的任何变体不是应该构造任何东西。它只返回要调用的构造函数的地址。此外,您还需要提供匹配的
operator delete,以防构造失败。但是不,不要这样做。使用std::vector。 -
如果这行得通,为什么还没有使用该语言?
-
@Alextandre,感谢您指出。我错过了在默认构造函数中进行调试:)。
标签: c++ arrays constructor new-operator