私が読んでいる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()
ますか?