Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.14.83.223] |
|
Страницы: (3) 1 2 [3] все ( Перейти к последнему сообщению ) |
Сообщ.
#31
,
|
|
|
Сообщ.
#32
,
|
|
|
Цитата JoeUser @ A добавлю в описалово noexcept - только попробуй выбросить необработанное исключение В Init тоже добавишь? Цитата JoeUser @ В каком месте кода? Везде. Вот например, лови: template<typename T> struct Holder { Holder() { std::cout << "Holder()::Holder()" << std::endl; if (!Self) Self = new T(); Self->Init(); } ~Holder() { if (Self) { Self->Cleanup(); delete Self; std::cout << "~Holder()::Holder()" << std::endl; } } T* Self = nullptr; }; //////////////////////////////////////////////////////////////////////////////////////// template <typename T> class Singleton { public: static T* Instance() { std::cout << "Singlton::Instance()" << std::endl; static Holder<T> Dummy; return Dummy.Self; } private: Singleton() = delete; Singleton(Singleton const&) = delete; Singleton& operator= (Singleton const&) = delete; Singleton(Singleton const&&) = delete; Singleton& operator= (Singleton const&&) = delete; }; class SomeClass { public: void Init() { connect(); initialize(); } void Cleanup() { disconnect(); } void connect() { std::cout << "connect" << std::endl; } void disconnect() { std::cout << "disconnect" << std::endl; } void initialize() { std::cout << "initialize" << std::endl; throw "Aaaaaaaaaaaaaaaaa"; } int member; }; int main() { { auto pInst = Singleton<SomeClass>::Instance(); pInst->member = 10; std::cout << pInst->member << std::endl; } auto pInst = Singleton<SomeClass>::Instance(); pInst->member = 20; return 0; } Добавлено Вот: https://ideone.com/8l75us Потерял ресурс, выхватил дедлок, не закрыл соединение, получил мемори лик... |
Сообщ.
#33
,
|
|
|
Ваще ниче не понял в твоей задумке! Но это жесть ... Я бы еще разделил на нуль для надежности !!! Добавлено Цитата Wound @ В Init тоже добавишь? Надо и в Инит добавлять |
Сообщ.
#34
,
|
|
|
Цитата JoeUser @ Ваще ниче не понял в твоей задумке! Но это жесть ... Я бы еще разделил на нуль для надежности !!! Ну ты из синглтона возвратил указатель на класс, я же могу его передать куда нибудь дальше в функцию? Например, что мешает мне написать вот так: void SomeFunction(std::unique_ptr<SomeClass>&& obj) { } int main() { std::unique_ptr<SomeClass> pObj(Singleton<SomeClass>::Instance()); SomeFunction(std::move(pObj)); } ?? И выхватить исключение? Цитата JoeUser @ Надо и в Инит добавлять А зачем? В конструкторах что исключения плохо бросать? А если мне нужно кинуть в Init исключение? Что мне делать то? |
Сообщ.
#35
,
|
|
|
Ребят, вы в Холивары не хотите переехать? Бо как ТС спросил вас, как ему сложить три сущности, а вы втираете ему про алгебру Ли и разбираете разницы гомоморфизмов своих разных методов сложения.
|
Сообщ.
#36
,
|
|
|
Ну можно и в холивары, я не против.
|
Сообщ.
#37
,
|
|
|
Скрытый текст Цитата Qraizer @ Ребят, вы в Холивары не хотите переехать? Цитата Wound @ Ну можно и в холивары, я не против. Не, я пожалуй пойду выпью чаю и съем еще французских булочек Киля - победил. |