gpt4 book ai didi

c++ - 使用参数构造函数模拟 new[]

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:02:50 25 4
gpt4 key购买 nike

如果我没有修改参数构造函数中的任何 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)
}

最佳答案

我建议

 std::vector<A> v(10, A(1,2));

我意识到这并没有真正解决数组的问题。你可以使用

 p = &v[0]; 

因为标准保证连续存储。不过,调整 vector 大小时要非常小心,因为它可能会使 p 无效

我检查了 boost::array<>(适应 C 风格的数组),但它没有定义构造函数...

关于c++ - 使用参数构造函数模拟 new[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6070231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com