我正在为内存分配器实现一些模板,并且遇到了一些我希望不编译的代码。在编写和测试模板函数来调用析构函数之后,我发现它在传入int*
之后仍然有效。
测试代码:
#include <iostream>
template<typename Class>
void CallDestructor(Class* InObj)
{
InObj->~Class();
}
int main()
{
int* test = new int;
*test = 5;
std::cout << *test << std::endl;
CallDestructor(test); // Why does this compile?
//test->~int(); // This does not compile which is what I expected for template function
std::cout << *test << std::endl;
delete test;
}
代码在我的www.cpp.sh和Visual Studio 2013中编译和运行。
感谢您的任何见解!