我有一個使用std::auto_ptr
並給出了(在SUSE Linux 12.2 GCC 4.7.1)有關不推薦std::auto_ptr
醜陋的警告,編譯時的一些代碼。什麼是C++ 11標準的等價物不推薦使用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
};
與AutoPtr<T>::Type
更換,std::auto_ptr<T>
任何引用,但有使用此選項時編譯錯誤。
我很確定我想在這些代碼片段上使用類似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套,我可以在這裏使用?
包裝類是有點毫無意義。你可以說'#define AutoPtr std :: auto_ptr'等,然後說'AutoPtr'。 –
什麼是編譯錯誤? –
它應該是'可變AutoPtr ::類型embeddedMock;' –