diff options
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/include/Ice/Application.h | 21 | ||||
-rw-r--r-- | cpp/include/Ice/Initialize.h | 20 | ||||
-rw-r--r-- | cpp/src/Ice/Initialize.cpp | 23 | ||||
-rw-r--r-- | cpp/test/Ice/admin/AllTests.cpp | 14 |
4 files changed, 56 insertions, 22 deletions
diff --git a/cpp/include/Ice/Application.h b/cpp/include/Ice/Application.h index 0df20b71a25..57aeea57821 100644 --- a/cpp/include/Ice/Application.h +++ b/cpp/include/Ice/Application.h @@ -24,11 +24,17 @@ enum SignalPolicy #endif { HandleSignals, NoSignalHandling }; -class ICE_API Application : private IceUtil::noncopyable +class ICE_API Application { public: Application(SignalPolicy = ICE_ENUM(SignalPolicy, HandleSignals)); + +#ifdef ICE_CPP11_MAPPING + Application(const Application&) = delete; + Application& operator=(const Application&) = delete; +#endif + virtual ~Application(); // This main() must be called by the global main(). main() @@ -41,10 +47,10 @@ public: int main(int, const char* const[], const InitializationData& = InitializationData(), int = ICE_INT_VERSION); int main(int, const char* const[], ICE_CONFIG_FILE_STRING, int = ICE_INT_VERSION); -# ifdef _WIN32 +#ifdef _WIN32 int main(int, const wchar_t* const[], const InitializationData& = InitializationData(), int = ICE_INT_VERSION); int main(int, const wchar_t* const[], ICE_CONFIG_FILE_STRING, int = ICE_INT_VERSION); -# endif +#endif int main(const StringSeq&, const InitializationData& = InitializationData(), int = ICE_INT_VERSION); int main(const StringSeq&, ICE_CONFIG_FILE_STRING, int = ICE_INT_VERSION); @@ -147,6 +153,15 @@ private: static void destroyOnInterruptCallback(int); static void shutdownOnInterruptCallback(int); static void callbackOnInterruptCallback(int); + +#ifndef ICE_CPP11_MAPPING + // + // Not defined, make Application non-copyable + // + Application(const Application&); + Application& operator=(const Application&); +#endif + }; } diff --git a/cpp/include/Ice/Initialize.h b/cpp/include/Ice/Initialize.h index 6d1ff3b7bed..a56beb04e7b 100644 --- a/cpp/include/Ice/Initialize.h +++ b/cpp/include/Ice/Initialize.h @@ -205,30 +205,30 @@ public: CommunicatorHolder(const CommunicatorHolder&) = delete; CommunicatorHolder(CommunicatorHolder&&) = default; - CommunicatorHolder& operator=(CommunicatorHolder&&) = default; + CommunicatorHolder& operator=(CommunicatorHolder&&); #else // C++98 mapping // // Call initialize to create communicator with the provided args // - CommunicatorHolder(int&, const char*[], const InitializationData&, int); + CommunicatorHolder(int&, const char*[], const InitializationData& = InitializationData(), int = ICE_INT_VERSION); CommunicatorHolder(int&, char*[], const InitializationData& = InitializationData(), int = ICE_INT_VERSION); - CommunicatorHolder(int&, const char*[], const char* configFile, int = ICE_INT_VERSION); - CommunicatorHolder(int&, char*[], const char* configFile, int = ICE_INT_VERSION); + CommunicatorHolder(int&, const char*[], const char*, int = ICE_INT_VERSION); + CommunicatorHolder(int&, char*[], const char*, int = ICE_INT_VERSION); #ifdef _WIN32 CommunicatorHolder(int&, const wchar_t*[], const InitializationData& = InitializationData(), int = ICE_INT_VERSION); CommunicatorHolder(int&, wchar_t*[], const InitializationData& = InitializationData(), int = ICE_INT_VERSION); - CommunicatorHolder(int&, const wchar_t*[], const char* configFile, int = ICE_INT_VERSION); - CommunicatorHolder(int&, wchar_t*[], const char* configFile, int = ICE_INT_VERSION); + CommunicatorHolder(int&, const wchar_t*[], const char*, int = ICE_INT_VERSION); + CommunicatorHolder(int&, wchar_t*[], const char*, int = ICE_INT_VERSION); #endif - CommunicatorHolder(StringSeq& args, const InitializationData& = InitializationData(),int = ICE_INT_VERSION); - CommunicatorHolder(StringSeq& args, const char* configFile, int = ICE_INT_VERSION); + CommunicatorHolder(StringSeq&, const InitializationData& = InitializationData(),int = ICE_INT_VERSION); + CommunicatorHolder(StringSeq&, const char*, int = ICE_INT_VERSION); CommunicatorHolder(const InitializationData& = InitializationData(), int = ICE_INT_VERSION); - CommunicatorHolder(const char* configFile, int = ICE_INT_VERSION); + CommunicatorHolder(const char*, int = ICE_INT_VERSION); // // Adopt communicator @@ -245,8 +245,8 @@ public: ~CommunicatorHolder(); const CommunicatorPtr& communicator() const; - CommunicatorPtr release(); const CommunicatorPtr& operator->() const; + CommunicatorPtr release(); private: diff --git a/cpp/src/Ice/Initialize.cpp b/cpp/src/Ice/Initialize.cpp index 87b1926f5f5..e2a334037c0 100644 --- a/cpp/src/Ice/Initialize.cpp +++ b/cpp/src/Ice/Initialize.cpp @@ -404,6 +404,17 @@ Ice::CommunicatorHolder::CommunicatorHolder(shared_ptr<Communicator> communicato { } +Ice::CommunicatorHolder& +Ice::CommunicatorHolder::operator=(CommunicatorHolder&& other) +{ + if(_communicator) + { + _communicator->destroy(); + } + _communicator = std::move(other._communicator); + return *this; +} + #else // C++98 mapping Ice::CommunicatorHolder::CommunicatorHolder(int& argc, const char* argv[], const InitializationData& initData, @@ -491,6 +502,12 @@ Ice::CommunicatorHolder::communicator() const return _communicator; } +const Ice::CommunicatorPtr& +Ice::CommunicatorHolder::operator->() const +{ + return _communicator; +} + Ice::CommunicatorPtr Ice::CommunicatorHolder::release() { @@ -503,12 +520,6 @@ Ice::CommunicatorHolder::release() #endif } -const Ice::CommunicatorPtr& -Ice::CommunicatorHolder::operator->() const -{ - return _communicator; -} - InstancePtr IceInternal::getInstance(const CommunicatorPtr& communicator) { diff --git a/cpp/test/Ice/admin/AllTests.cpp b/cpp/test/Ice/admin/AllTests.cpp index 97a6c110045..274edaacaf0 100644 --- a/cpp/test/Ice/admin/AllTests.cpp +++ b/cpp/test/Ice/admin/AllTests.cpp @@ -190,9 +190,17 @@ allTests(const Ice::CommunicatorPtr& communicator) init.properties = Ice::createProperties(); init.properties->setProperty("Ice.Admin.Endpoints", "tcp -h 127.0.0.1"); init.properties->setProperty("Ice.Admin.InstanceName", "Test"); - Ice::CommunicatorPtr com = Ice::initialize(init); - testFacets(com); - com->destroy(); + Ice::CommunicatorHolder ich(init); + testFacets(ich.communicator()); + +#ifdef ICE_CPP11_MAPPING + // Test move assignment on CommunicatorHolder + std::shared_ptr<Ice::Communicator> nullCommunicator; + Ice::CommunicatorHolder ich2(nullCommunicator); + ich2 = std::move(ich); + test(ich2.communicator()); + test(!ich.communicator()); +#endif } { // |