Вряд ли такое возможно ... Только если ты сам будешь всегда делать динамический вызов.
А насчет friend и static это ты зря. Их можно использовать везде, по мере необходимости.
Re: Можно ли создать класс, создавать только динамически?
Здравствуйте Haiodo, Вы писали:
H>Скажите Please! можно ли создать класс только с динимическим созданием.
H>Например.
H> H>
H>class Test {
H> //...
H>};
H>int test( ) {
H> Test t; // Должен выдавать ошибку компиляции.
H> Test* pt = new Test( ); // Должна нормально работать.
H> //...
H>}
H>
H>Но проблемма нельзя использовать friends и static методы.
H>Заранее благодарен.
Очень подробно рассказано у Мейерса в его 85 советах по улучшению программ на С++ или у Элджера в черной книге по извращениям. Если правильно помню, задача в общем виде не имеет решения — либо от класса нельзя наследовать, или еще что-то вылезает
Re[2]: Можно ли создать класс, создавать только динамически?
Здравствуйте ivan_k, Вы писали:
IK>Очень подробно рассказано у Мейерса в его 85 советах по улучшению программ на С++ или у Элджера в черной книге по извращениям. Если правильно помню, задача в общем виде не имеет решения — либо от класса нельзя наследовать, или еще что-то вылезает
А нельзя ли поподробнее о второй книжке.
Заранее благодарен.
Re[3]: Можно ли создать класс, создавать только динамически?
Здравствуйте Haiodo, Вы писали:
H>Здравствуйте ivan_k, Вы писали:
IK>>Очень подробно рассказано у Мейерса в его 85 советах по улучшению программ на С++ или у Элджера в черной книге по извращениям. Если правильно помню, задача в общем виде не имеет решения — либо от класса нельзя наследовать, или еще что-то вылезает
H>А нельзя ли поподробнее о второй книжке. H>Заранее благодарен.
Тут на сайте очень хорошая подборка ресурсов: Ресурсы/Книги/С++/С++: Библиотека программиста — это и есть более подробное описание книжки. Лично мне книга показалась тяжеловатой 1) из-за нетрадиционной терминологии 2) решения уже решенных (сейчас, но, очевидно, не на момент написания) проблем. Мейерс там же описан, по мне — он попроще и более "совместимый" с другой литературой, особенно со Страуструпом.
Re: Можно ли создать класс, создавать только динамически?
Здравствуйте Lloyd, Вы писали:
L>Здравствуйте Haiodo, Вы писали:
H>>Скажите Please! можно ли создать класс только с динимическим созданием.
H>>Например.
H>> H>>
H>>class Test {
H>> //...
H>>};
H>>int test( ) {
H>> Test t; // Должен выдавать ошибку компиляции.
H>> Test* pt = new Test( ); // Должна нормально работать.
H>> //...
H>>}
H>>
H>>Но проблемма нельзя использовать friends и static методы.
H>>Заранее благодарен.
L>Спрашиваю как человек далекий от C++. А зачем?
Как человек, знакомый с Явой, отвечаю: там это не сильно нужно, а в С++ можно положиться на автоудаление стековых переменных при выходе из области видимости (при завершении блока нормальным образом или по exception с включенной раскруткой стека). Зачем полагаться на автоудаление — для освобождения ресурсов (в Яве я так и не научился делать это со 100% уверенностью в надежности своего кода) — смотри шаблок auto_ptr (авторабота с кучей) и ему подобные.
Внимание, ответ. Если разрабатывается библиотека, которую будут пользовать чайники (т.е. любой программист, кроме автора), требуется запретить им делать бессмысленные вещи, например, размещать структуры типа auto_ptr в куче, так как там они не решают задач, для которых создавались (ограждение пользователя от этой кучи). Еще один пример — блокировка. Очень плохо, когда она почему-то не удаляется. Еще — соединение с БД — обидно, когда сервер понемногу съедает лимит.
Re[3]: Можно ли создать класс, создавать только динамически?
Здравствуйте Коренчук Иван, Вы писали:
L>>Спрашиваю как человек далекий от C++. А зачем?
КИ>Как человек, знакомый с Явой, отвечаю: там это не сильно нужно, а в С++ можно положиться на автоудаление стековых переменных при выходе из области видимости (при завершении блока нормальным образом или по exception с включенной раскруткой стека). Зачем полагаться на автоудаление — для освобождения ресурсов (в Яве я так и не научился делать это со 100% уверенностью в надежности своего кода) — смотри шаблок auto_ptr (авторабота с кучей) и ему подобные. КИ>Внимание, ответ. Если разрабатывается библиотека, которую будут пользовать чайники (т.е. любой программист, кроме автора), требуется запретить им делать бессмысленные вещи, например, размещать структуры типа auto_ptr в куче, так как там они не решают задач, для которых создавались (ограждение пользователя от этой кучи). Еще один пример — блокировка. Очень плохо, когда она почему-то не удаляется. Еще — соединение с БД — обидно, когда сервер понемногу съедает лимит.
Какое-то перепутывание...
Автоматические (automatic) — на стеке — экземпляры — это достоинство, а не недостаток C++! Тем самым гарантируется сборка этого рода мусора. Причем известно время этой уборки.
auto_ptr и другие умные указатели только облегчают жизнь.
А вот использование голых, необернутых указателей — и есть источник ошибок.
В яве ты полагаешься на сборщика мусора... А какая у него стратегия? При желании можно любого сборщика замордовать. На то уж пошло, в яве все указатели — "умные" (только они не гробят объекты, а взаимодействуют со сборщиком).