【发布时间】:2015-03-06 16:02:59
【问题描述】:
我想通过分配 n * sizeof(T) 个字节为 n T 个对象分配内存,并使用 new 获取指针。下面的代码有什么问题?
template <class T>
void foo(size_t n, const T& value)
{
T* buffer = reinterpret_cast<T*>(new char[n * sizeof(T)]);
for (int i = 0; i < n; i++) {
buffer[i] = value;
std::cout << buffer[i] << std::endl;
}
std::cout << "success" << std::endl;
}
如果我调用foo<int>(n, int());,但如果我调用foo<std::string>(n, std::string());,则会出现分段错误。
【问题讨论】:
-
您无法将随机内存重新解释为字符串
-
T* 缓冲区 = 新 T[n];或者更好的是,使用矢量。事实上,你正在泄漏内存。
-
@ehang,是的,这显然可以解决问题,但它会调用默认初始化程序 T n 次,我只是想要一种方法来避免它。
-
如果使用vector,可以指定默认值。在内部,它会为您调用placement new。
标签: c++ templates pointers memory