0
#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];           
};

この種の実装は醜く、実際のケースでは使用しません。このような新しい配置を使用して安全かどうかを知りたいだけですか?ありがとう

お二人のおかげで、コードを少し変更しましたが、これで安全ですか?

4

1 に答える 1

0

必ずしもそうとは限りませんが、アラインメントの問題によりコードが失敗する可能性があります。 member はとstorage_の両方のアラインメントを処理できる方法でアラインメントする必要があるため、常に安全であるとは限りません。UV

于 2012-11-04T10:49:58.437 に答える