powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Thread-safe singleton
7 сообщений из 7, страница 1 из 1
Thread-safe singleton
    #37982249
Katamaran1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Увидел сегодня такой код, этот синглтон является потоко-безопасным?И нужно ли явно вызывать DestroyInstance?И разве для освобождения не надо использовать delete ведь выделение было все таки new или для плейсмант new все нормально?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
template <class Ty>
class DestroyableSingleton : public Ty
{
public:
	static Ty* Instance()
	{
		if (!single_instance_)
		{
			single_instance_ = (Ty*)malloc(sizeof(Ty));
			memset((void*)single_instance_, 0, sizeof(Ty));
			if (single_instance_)
				single_instance_ = new(single_instance_) Ty;
		}
		return single_instance_;
	}
	static void DestroyInstance()
	{
		single_instance_->~Ty();
		free(single_instance_);
		single_instance_ = 0;
	}

private:
	static Ty* single_instance_;

	DestroyableSingleton();

	DISALLOW_COPY_AND_ASSIGN(DestroyableSingleton);
};
...
Рейтинг: 0 / 0
Thread-safe singleton
    #37982385
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Katamaran1987Увидел сегодня такой код, этот синглтон является потоко-безопасным?И нужно ли явно вызывать DestroyInstance?И разве для освобождения не надо использовать delete ведь выделение было все таки new или для плейсмант new все нормально?
1) нет, не потоко-безопасный
2) DestroyInstance вызывать можно, но только после хотя бы одного вызова instance()
3) delete для placement new не применяется
...
Рейтинг: 0 / 0
Thread-safe singleton
    #37982437
Katamaran1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такой синглтон как мне обьяснили исользуется чтоб небыло рекурсии при вызове Instance.
...
Рейтинг: 0 / 0
Thread-safe singleton
    #37982496
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Katamaran1987Такой синглтон как мне обьяснили исользуется чтоб небыло рекурсии при вызове Instance.
Чтобы не было рекурсии надо не использовать рекурсию.
Не обязательно городить кучу бессмысленного кода (это я про placement new).
...
Рейтинг: 0 / 0
Thread-safe singleton
    #37982506
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyKatamaran1987Такой синглтон как мне обьяснили исользуется чтоб небыло рекурсии при вызове Instance.
Чтобы не было рекурсии надо не использовать рекурсию.
Не обязательно городить кучу бессмысленного кода (это я про placement new).и к тому же опасного. не дай бог в этот шаблон передадут полиморфный тип, memset сделает с ним довольно жестокую вещь )))
...
Рейтинг: 0 / 0
Thread-safe singleton
    #37982519
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychи к тому же опасного. не дай бог в этот шаблон передадут полиморфный тип, memset сделает с ним довольно жестокую вещь )))
Не, там мемсет до конструктора вызывается, так что все ок - в-таблица в конструкторе инициализируется.
Но проблема что мемсет также вызывается и до проверки указателя на 0, что делает эту проверку по сути бесполезной :)
...
Рейтинг: 0 / 0
Thread-safe singleton
    #37982525
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А сам мемсет там вообще не нужен, т.к. это задача конструктора - инициализировать память объекта.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Thread-safe singleton
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]