代码肯定有问题,double free 了,但是因为 double free 是未定义的,所以不一定会挂掉。
用 valgrind 也能清楚的看到多了一次 free:
```
==5561== Invalid free() / delete / delete[] / realloc()
==5561== at 0x4C2C64B: operator delete(void*) (in /usr/lib/valgrind/
vgpreload_memcheck-amd64-linux.so)
==5561== by 0x4009C7: Holder::~Holder() (in /vagrant/Work/waimai/inf_waf/j/build/a.out)
==5561== by 0x40161A: void std::_Destroy<Holder>(Holder*) (in /vagrant/Work/waimai/inf_waf/j/build/a.out)
==5561== by 0x401500: void std::_Destroy_aux<false>::__destroy<Holder*>(Holder*, Holder*) (in /vagrant/Work/waimai/inf_waf/j/build/a.out)
==5561== by 0x401187: void std::_Destroy<Holder*>(Holder*, Holder*) (in /vagrant/Work/waimai/inf_waf/j/build/a.out)
==5561== by 0x400CE4: void std::_Destroy<Holder*, Holder>(Holder*, Holder*, std::allocator<Holder>&) (in /vagrant/Work/waimai/inf_waf/j/build/a.out)
==5561== by 0x400A1C: std::vector<Holder, std::allocator<Holder> >::~vector() (in /vagrant/Work/waimai/inf_waf/j/build/a.out)
==5561== by 0x40092B: main (in /vagrant/Work/waimai/inf_waf/j/build/a.out)
==5561== Address 0x5a9fd30 is 0 bytes inside a block of size 4 free'd
==5561== at 0x4C2C64B: operator delete(void*) (in /usr/lib/valgrind/
vgpreload_memcheck-amd64-linux.so)
==5561== by 0x4009C7: Holder::~Holder() (in /vagrant/Work/waimai/inf_waf/j/build/a.out)
==5561== by 0x40091A: main (in /vagrant/Work/waimai/inf_waf/j/build/a.out)
==5561== Block was alloc'd at
```