gpt4 book ai didi

c++ - 在模板类中使用 'new' 是类型安全的吗?

转载 作者:太空宇宙 更新时间:2023-11-04 12:47:43 26 4
gpt4 key购买 nike

我正在研究我自己的 vector 实现,其中一个人在 IRC 上说,使用“new”在模板类中分配内存不是类型安全的。例如在这段代码中:

// resize array when needed
template <class T>
void myVector<T>::resize()
{
vCapacity += 5;
T* temp = new T[vCapacity]();

for (unsigned i = 0; i < vCapacity; i++) temp[i] = vArray[i];

delete [] vArray;
vArray = temp;
temp = nullptr;
}

这是真的吗?当我学习 C++ 时,没有人提到这一点,如果我没记错的话,当编译器编译模板类/函数时,它会用正确的类型替换 'T'。

最佳答案

如果您在 int vector 上调用它,编译器将生成一些像这样的临时函数:

void myVector_int::resize()
{
vCapacity += 5;
int* temp = new int[vCapacity]();

for (unsigned i = 0; i < vCapacity; i++) temp[i] = vArray[i];

delete [] vArray;
vArray = temp;
temp = nullptr;
}

因此这实际上是一个具有“普通”类型的“普通”函数,这使得它完全是类型安全的。因此,编译器将 T 替换为实际类型是完全正确的。

关于c++ - 在模板类中使用 'new' 是类型安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50525896/

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