我可以使用位置为new
的动态整数数组的内存吗?
int* p = new int[10]{};
std::string* pstr = new(p)std::string("Hi there");
std::cout << *pstr << std::endl;
pstr->~std::string();
delete[] p;
代码运行良好,但这样做安全吗?非常感谢。
不,正如所写的那样,这是不安全的,因为您不确定sizeof (std::string)
是<=10 * sizeof (int)
。
如果你添加代码来检查它,那么它是安全的(r(,比如:
size_t bytes_needed = sizeof (std::string);
size_t ints_needed = (bytes_needed + sizeof (int) - 1) / sizeof (int);
int *p = new int [ints_needed];
...
然而,也可能存在对齐问题,因此使用aligned_alloc
(和free
(而不是new []
(和delete []
(是更好的选择