Вы не реализуете одноразовый шаблон через интерфейс IDisposable
, у вас просто есть метод Dispose
, в свою очередь вы не сможете вызвать его в операторе using
.
public class Database : IDisposable { ... }
Это все немного подозрительно, я имею в виду, если вы уже используете его, вы не используете это в выражении using
и, по-видимому, пытаетесь кэшировать соединение. Я бы вообще уклонялся от этого.
Также у вас есть деструктор, однако его использование некорректно в 99% случаев
Библиотека Boost включает некоторый материал shared_ptr, который в основном действует как сборщик "мусора" подсчета ссылок. При охвате принципа RAII дизайна C++ это и auto_ptr удовлетворят потребность в "сборщике"мусора"".
Несколько C++ GC перечислены на Википедию.
Однако я не использую никого, RAII является также моим другом.
Сборщик "мусора" Boehm довольно хорош для C, но хитер для использования под C++. Проверьте раздел "C ++ interface" по http://www.hpl.hp.com/personal/Hans_Boehm/gc/gcinterface.html.
Мое мнение - то, что, если Вам нужна сборка "мусора", выбрать langage, который имеет ее встроенный.
Лучшим общим решением для C++ являются совместно использованные указатели (от повышения, например) с Вами имеющий дело с круговыми зависимостями. Существует две вещи, которые можно сделать: 1. разработайте вещь без круговых зависимостей 2. разработайте вещь с 'опорой', которая повреждает круг для разрешения восстановления объектов
Или Вы имеете дело с очень плохим, замысловатым, трудно для отладки проблем со сборщиком "мусора" для C++, или Вы имеете дело с более простой классической проблемой освобождения Ваших объектов, когда Вы сделаны с ними.
Единственный, о котором я услышал лично, является сборщиком "мусора" Boehm, я уверен, что другие существуют, но я не имел дело с ними (или искал их любой).
Всегда существует, гм: C++ / CLI - C++ для Платформы.NET. Довольно хорошая сборка "мусора" там.:p
Хотя, честно говоря, со всем синтаксическим сахаром они помещают там, Вы могли почти считать это совершенно новым языком, который просто, оказывается, работает с C/C++ довольно хорошо.
Если Вы не женаты на C++ как язык, Вы могли бы также изучить D, который компилирует в собственный код как C++ (и в отличие от C++ / CLI), но также и имеет сборку "мусора".
Можно найти несколько реализаций здесь. Я никогда не пробовал ни одного из них, и в целом я нахожу недетерминированный GC, наносящий больше ущерба, чем хороший.