Ссылки на элементы, выделенные в куче, - ужасная идея? Почему?

Чтобы лучше всего объяснить эту проблему, я построил простой пример. Скажем, у меня есть класс Blob следующим образом:

class Blob
{
    string personalName;
    string& familyName;
}

A Blob может быть порожден Создателем (также известным как Программист), после чего он может выбрать personalName и, поскольку он имеет привилегию быть Blob 1-го поколения , он может выбрать свое собственное familyName .

В качестве альтернативы Blob может может быть создан путем порождения существующего Blob , после чего он выбирает свое собственное personalName , но разделяет familyName со всеми другими Blob s, которые были клонированы в этом семействе. Если один Blob изменяет фамилию, все остальные члены семьи получают это имя автоматически.

Пока все звучит хорошо, пока при написании конструктора Blob I см. это:

Blob::Blob() :
    personalName(pickName()),
    familyName(pickFamilyName())
{ }

...

string& Blob::pickFamilyName()
{
    return *(new string("George"));
}   // All Blobs have family name "George" in this example

Eek! Выделить память в куче, а затем назначить ее ссылочной переменной ?! Это выглядит устрашающе!

Мои инстинкты верны, что с этим что-то не так, или мне это кажется странным только потому, что это необычный образец? Если что-то не так, что это? Почему это плохой дизайн?

Примечание. Было бы важно освободить выделенную в куче память путем подсчета ссылок и удаления памяти при уничтожении последнего Blob-объекта или каким-либо другим способом.

7
задан Cory Klein 15 October 2013 в 21:07
поделиться