我正在阅读的 STL 代码可能很旧......但问题与 C++ 模板语法更相关。
问题围绕着这个 stl 模板函数:
template<class T> std::destroy(T *p) {
p->~T();
}
我似乎找不到 std::destroy(T *) 函数的特化。所以在我看来,模板函数将为“int”类型实例化相同,并调用“int”的析构函数。为了说明我的观点,我创建了这个模拟 std::destroy 的示例代码。我称它为 my_destroy 在这个例子中。
#include <iostream>
#include <stdio.h>
using namespace std;
template <class T>
void my_destroy(T * pointer) {
pointer->~T();
}
int main()
{
int *a;
//a->~int(); // !!! This won't compile.
my_destroy<int>(a); // !!! This compiles and runs.
}
}
令我惊讶的是,这一行无法编译:
a->~int();
但是这一行编译:
my_destroy<int>(a);
我的困惑是,我认为这my_destroy<int>(a)
将被实例化为a->~int();
对于更大范围内的一个问题,当一个 STL 容器<int>
擦除一个元素时,它是如何std::destroy()
工作的?