The somDefaultCopyInit method would be called a "copy constructor" in C++. In SOM, this concept is supported using an object initializer that accepts the object to be copied as an argument. Copy constructors are used in C++ to pass objects by value. They initialize one object by making it be a copy of another object. In SOM, objects are always passed by reference, so arguments to DTS C++ methods that receive call-by-value object parameters are actually passed by reference. But, to correctly support the semantics of DTS C++ call-by-value arguments, it is necessary to actually pass a copy of the intended argument. In general, somDefaultCopyInit should be used to make this copy.
The default behavior provided by somDefaultCopyInit is to do a shallow copy of each ancestor class's introduced instance variables. However, a class may always override this default behavior (for example, to do a deep copy for certain variables). If it is possible to avoid modification of fromObj when doing the copy, the method somDefaultConstCopyInit should be overridden for this purpose. Only if this is not possible (and shallow copy is not appropriate) would it be appropriate to override somDefaultCopyInit.
The considerations important to overriding somDefaultCopyInit are similar to those described in the SOMobjects Users Guide for overriding somDefaultInit. (See "Initializing and Uninitializing Objects" in Chapter 5, "Implementing Classes in SOM.") The basic difference between somDefaultInit and somDefaultCopyInit is that the latter method takes an object (fromObj) as an argument that is to be copied.