コンパイル時に非推奨 (Suse Linux 12.2 上の GCC 4.7.1)を使用std::auto_ptr
して醜い警告を出すコードがいくつかあります。std::auto_ptr
だから私は次のことを試しました(州std::unique_ptr
が適切な同等物であるべきであるというソースを見つけたので)
template<typename T>
struct AutoPtr
{
#ifdef COMPILE_FOR_CX11
typedef std::unique_ptr<T> Type;
#else
typedef std::auto_ptr<T> Type;
#endif
};
std::auto_ptr<T>
への参照をに置き換えましAutoPtr<T>::Type
たが、このオプションを使用するとコンパイル エラーが発生しました。
これらのコードのようなものを使用したいと確信std::auto_ptr
しており、その原因と欠陥については認識しています。私が得たエラーstd::unique_ptr
は、使用時の構築の問題と相関しているようです。
補足として: 構築に使用される最終的なクラスは の継承型ですT
。コードは次のようになります。
class MockClass;
class Client
{
public:
Client();
Client(const Client& rhs);
private:
mutable AutoPtr<MockClass>::Type embeddedMock;
};
Client::Client()
: embeddedMock(new ::testing::NiceMock<MockClass>())
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// Getting errors here!
{
}
Client::Client(const Client& rhs)
: embeddedMock(rhs.embeddedMock)
{
}
では、ここで使用できる C++11 セットの完全に準拠したスマート ポインターは何ですか?