形式正确地显式调用typedef的类类型的析构函数

时间:2018-07-25 09:41:31

标签: c++ language-lawyer destructor typedef scope-resolution

这个问题与:C++: Explicitly call destructor of template parameter's typedef

我有以下内容:

class A {
public:
  typedef std::shared_ptr<A> Ptr;
  …
};

稍后,我有一个类型为ptr的变量A::Ptr *,该变量是通过放置new获得的,基本上是通过调用如下函数来实现的:

A::Ptr * f(A::Ptr obj) {
  void * placement = get_legacy_storage(sizeof(obj));
  return new(placement) A::Ptr(obj);
}

我现在想用一个明确的析构函数调用来撤消新的placement。我是这样的:

ptr->A::Ptr::~Ptr();

如对链接问题的答案的评论中所述,此方法适用于gcc,但不适用于clang。该标准的第12.4p13条说

  

在显式析构函数调用中,析构函数名称显示为〜,后跟表示析构函数的类类型的 type-name decltype-specifier

但是我不确定它如何与typedef和作用域解析交互。 所以,我的问题是:

  1. 在上述情况下(理想情况下不显示Ptr类型的情况下,显式调用析构函数的符合C ++-11标准的方法是什么?
  2. 1的答案是否适用于gcc和/或clang?如果没有,什么是普遍接受的解决方法?

0 个答案:

没有答案