这个工具安全吗(笨拙的变种)?

时间:2012-11-04 10:46:51

标签: c++

#include <iostream>
#include <new>
#include <type_traits>

template<typename T, typename U>
struct promote
{
  typedef typename std::conditional<(sizeof(T) > sizeof(U)), T, U>::type type;
};    

template<class U, class V>
class risk_implementation
{
  public:

  template<class T>
  risk_implementation(T const &t)      
  {
    new(storage_) T(t);
  }      

 //easier to do some test with public
 typedef typename promote<U, V>::type Bigger;
 typedef typename std::aligned_storage<sizeof(Bigger), alignof(Bigger)>::type storage_type;
 storage_type storage_[1];           
};

这种实现很丑陋,我不会在实际案例中使用它 我只想知道使用这样的安置是否安全?谢谢

感谢你们两位,我稍微修改了一下代码,现在这样安全吗?

1 个答案:

答案 0 :(得分:0)

不一定,由于对齐问题,您的代码可能会失败,storage_成员必须以能够处理UV对齐的方式对齐,因此并非总是如此安全