gpt4 book ai didi

C++模板函数,替换失败跳过实现

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:04:36 28 4
gpt4 key购买 nike

我有下面的代码只是为了测试,模板函数用了两次,第一次没问题。在第二种情况下,我创建了一个指针并将该指针作为引用传递给模板函数。我预计“obj.~T()”行编译时间失败。但实际上代码编译并运行良好。当我通过函数调试时,程序只是跳过 obj.~T();我正在使用 VC10。

我的问题是:
1. 这是预期的行为吗?如果它基于 c++ standrade 的哪一部分?
2. 这种行为有什么利弊吗???就我而言,这很好,因为没有编译错误,也没有运行时错误。但是可能会有一些我不知道但确实损坏了代码的情况。

谢谢

template<typename T>
void ptrDest(T& obj)
{
obj.~T();
}

class Dummy
{
public:
Dummy(){}
~Dummy(){ cout << "dest" <<endl;}
};

int main()
{
Dummy d;
ptrDest(d);

Dummy* pd = new Dummy();
ptrDest(pd);
return 0;
}

最佳答案

这是一个显式析构函数调用,它是一个有效的操作,尽管不一定被认为是一个好的做法。如果可能,请考虑改用作用域变量。

在你的第二次调用中,你实际上是在尝试调用指针的析构函数,它确实不存在,而不是指向对象的析构函数,这就是它跳过它的原因。不过请注意,您的 Dummy 对象在第二次调用后仍会分配,并且在任何情况下都会发生泄漏。

关于C++模板函数,替换失败跳过实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22368293/

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