summaryrefslogtreecommitdiff
path: root/TAO/tao/Managed_Types.i
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/Managed_Types.i')
-rw-r--r--TAO/tao/Managed_Types.i61
1 files changed, 48 insertions, 13 deletions
diff --git a/TAO/tao/Managed_Types.i b/TAO/tao/Managed_Types.i
index 73f66c7cdf6..aa03deb7c56 100644
--- a/TAO/tao/Managed_Types.i
+++ b/TAO/tao/Managed_Types.i
@@ -1,4 +1,5 @@
-/* -*- C++ -*- */
+// -*- C++ -*-
+//
// $Id$
// ============================================================================
@@ -16,6 +17,8 @@
// ****************************************************************
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
// default CTOR initializes to empty string
ACE_INLINE
TAO_String_Manager::TAO_String_Manager (void)
@@ -30,6 +33,12 @@ TAO_String_Manager::TAO_String_Manager (const TAO_String_Manager &rhs)
{
}
+ACE_INLINE
+TAO_String_Manager::TAO_String_Manager (const char *s)
+ : ptr_ (CORBA::string_dup (s))
+{
+}
+
// destructor
ACE_INLINE
TAO_String_Manager::~TAO_String_Manager (void)
@@ -41,11 +50,14 @@ TAO_String_Manager::~TAO_String_Manager (void)
ACE_INLINE TAO_String_Manager&
TAO_String_Manager::operator= (const TAO_String_Manager &rhs)
{
- if (this == &rhs)
- return *this;
+ // Strongly exception safe by means of copy and non-throwing swap
+ // technique.
+ TAO_String_Manager tmp (rhs);
+
+ char * old_ptr = this->ptr_;
+ this->ptr_ = tmp.ptr_;
+ tmp.ptr_ = old_ptr;
- CORBA::string_free (this->ptr_);
- this->ptr_ = CORBA::string_dup (rhs.ptr_);
return *this;
}
@@ -53,8 +65,14 @@ TAO_String_Manager::operator= (const TAO_String_Manager &rhs)
ACE_INLINE TAO_String_Manager &
TAO_String_Manager::operator= (const char * p)
{
- CORBA::string_free (this->ptr_);
- this->ptr_ = CORBA::string_dup (p);
+ // Strongly exception safe by means of copy and non-throwing swap
+ // technique.
+ TAO_String_Manager tmp (p);
+
+ char * old_ptr = this->ptr_;
+ this->ptr_ = tmp.ptr_;
+ tmp.ptr_ = old_ptr;
+
return *this;
}
@@ -208,6 +226,12 @@ TAO_WString_Manager::TAO_WString_Manager (const TAO_WString_Manager &rhs)
{
}
+ACE_INLINE
+TAO_WString_Manager::TAO_WString_Manager (const CORBA::WChar *ws)
+ : ptr_ (CORBA::wstring_dup (ws))
+{
+}
+
// destructor
ACE_INLINE
TAO_WString_Manager::~TAO_WString_Manager (void)
@@ -219,11 +243,14 @@ TAO_WString_Manager::~TAO_WString_Manager (void)
ACE_INLINE TAO_WString_Manager&
TAO_WString_Manager::operator= (const TAO_WString_Manager &rhs)
{
- if (this == &rhs)
- return *this;
+ // Strongly exception safe by means of copy and non-throwing swap
+ // technique.
+ TAO_WString_Manager tmp (rhs);
+
+ CORBA::WChar * old_ptr = this->ptr_;
+ this->ptr_ = tmp.ptr_;
+ tmp.ptr_ = old_ptr;
- CORBA::wstring_free (this->ptr_);
- this->ptr_ = CORBA::wstring_dup (rhs.ptr_);
return *this;
}
@@ -231,8 +258,14 @@ TAO_WString_Manager::operator= (const TAO_WString_Manager &rhs)
ACE_INLINE TAO_WString_Manager &
TAO_WString_Manager::operator= (const CORBA::WChar * p)
{
- CORBA::wstring_free (this->ptr_);
- this->ptr_ = CORBA::wstring_dup (p);
+ // Strongly exception safe by means of copy and non-throwing swap
+ // technique.
+ TAO_WString_Manager tmp (p);
+
+ CORBA::WChar * old_ptr = this->ptr_;
+ this->ptr_ = tmp.ptr_;
+ tmp.ptr_ = old_ptr;
+
return *this;
}
@@ -370,3 +403,5 @@ TAO_SeqElem_WString_Manager::_retn (void)
*this->ptr_ = 0;
return temp;
}
+
+TAO_END_VERSIONED_NAMESPACE_DECL