Index: source/common/rbbi.cpp |
=================================================================== |
--- source/common/rbbi.cpp (revision 122609) |
+++ source/common/rbbi.cpp (working copy) |
@@ -1504,19 +1504,8 @@ |
// |
// Clone the source BI into the caller-supplied buffer. |
- // TODO: using an overloaded operator new to directly initialize the |
- // copy in the user's buffer would be better, but it doesn't seem |
- // to get along with namespaces. Investigate why. |
// |
- // The memcpy is only safe with an empty (default constructed) |
- // break iterator. Use on others can screw up reference counts |
- // to data. memcpy-ing objects is not really a good idea... |
- // |
- RuleBasedBreakIterator localIter; // Empty break iterator, source for memcpy |
- RuleBasedBreakIterator *clone = (RuleBasedBreakIterator *)buf; |
- uprv_memcpy(clone, &localIter, sizeof(RuleBasedBreakIterator)); // init C++ gorp, BreakIterator base class part |
- clone->init(); // Init RuleBasedBreakIterator part, (user default constructor) |
- *clone = *this; // clone = the real BI we want. |
+ RuleBasedBreakIterator *clone = new(buf) RuleBasedBreakIterator(*this); |
clone->fBufferClone = TRUE; // Flag to prevent deleting storage on close (From C code) |
return clone; |