Я столкнулся с проблемой при использовании Loki :: Singleton, Loki :: SmartPtr и зОго :: вектор под VC express 2008. Следующим является мой источник.Странная проблема памяти о Loki :: Singleton, Loki :: SmartPtr и станд :: вектор
#include <iostream>
#include <vector>
#include <loki/Singleton.h>
#include <loki/SmartPtr.h>
class Foo {
public:
std::vector<Loki::SmartPtr<Foo>> children ;
void add() {
Loki::SmartPtr<Foo> f = new Foo ;
children.push_back(f) ;
}
Foo() {
}
~Foo() {
}
} ;
typedef Loki::SingletonHolder<Foo> SingletonFoo ;
int main()
{
std::cout << "Start" << std::endl ;
SingletonFoo::Instance().add() ;
std::cout << "End" << std::endl ;
}
Компиляция и связывание не имеет никаких проблем, но после завершения программы, ошибка выскакивает:
Windows has triggered a breakpoint in test.exe.
This may be due to a corruption of the heap, which indicates a bug in test.exe or any of the DLLs it has loaded.
This may also be due to the user pressing F12 while test.exe has focus.
The output window may have more diagnostic information.
Это кажется часть памяти удаляется дважды, я совсем не уверен. Это ошибка VC или я пропустил Loki?
Заранее спасибо.
Я перепробовал использование Loki :: SmartPtr, политика по умолчанию - это счетчик ссылок, который имеет такое же поведение с Boost :: shared_ptr, поддерживает семантическое значение и может использоваться в контейнере STL. Есть ли другие возможные объяснения? Большое спасибо. – yoco
Если вы подозреваете, что ваши объекты дважды удаляются, попытались ли вы придерживаться контрольных точек в своем деструкторе и проверить стек вызовов? –