BContactField* BContactField::Duplicate(BContactField* from) { BContactField* child = NULL; type_code childType = from->FieldType(); ObjectDeleter<BContactField> deleter; switch (childType) { case B_CONTACT_NAME: case B_CONTACT_NICKNAME: case B_CONTACT_EMAIL: case B_CONTACT_NOTE: case B_CONTACT_ORGANIZATION: case B_CONTACT_IM: case B_CONTACT_URL: case B_CONTACT_PHONE: child = new BStringContactField(childType); break; case B_CONTACT_ADDRESS: child = new BAddressContactField(); break; case B_CONTACT_PHOTO: child = new BPhotoContactField(); break; } if (child != NULL && child->CopyDataFrom(from) == B_OK) return child; deleter.SetTo(child); return NULL; }
BContactField* BContactField::Duplicate(BContactField* from) { BContactField* child = NULL; type_code childType = from->FieldType(); ObjectDeleter<BContactField> deleter; child = BContactField::InstantiateChildClass(childType); if (child != NULL && child->CopyDataFrom(from) == B_OK) return child; deleter.SetTo(child); return NULL; }