我有明确的反对:破坏尖,与decltype
T* p;
,我想这样做:
p->~decltype(*p)();
但是,它不工作。
p->~T();
的工作,但它喜欢decltype()
做到这一点,如果可能的话。
错误消息:
error: expected class-name before 'decltype'
编辑:用例
我试图避免使用ALLOCA +放置新的阵列的栈上分配的数组使用VLA的。放置新元素之后,堆栈数组中的对象需要明确销毁。我知道如何解决这个问题,我可以这样做:
using T = ::std::remove_reference_t<decltype(*p)>;
p->~T();
但是,我很疑惑为什么这是必要的。
'decltype(* P) ''是'T',而不是'T'。即使你的语法被接受,它仍然不起作用。 – hvd
没有任何意义。它不会像调用一个函数一样。你能介绍一下用例吗? – Arunmu
我很好奇,'alloca'给你带来的是什么,VLA不会呢? 'alloca'与VLA一样非标准,VLA至少具有编译器支持来正确处理异常并根据需要自动构建和销毁。还有其他一些重要的区别吗? – hvd