allocator_test.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 134 行
CPP
134 行
// Boost.Function library// Copyright Douglas Gregor 2001-2003. Use, modification and// distribution is subject to the Boost Software License, Version// 1.0. (See accompanying file LICENSE_1_0.txt or copy at// http://www.boost.org/LICENSE_1_0.txt)// For more information, see http://www.boost.org#include <boost/test/minimal.hpp>#include <cassert>#include <functional>#include <boost/function.hpp>using namespace std;using namespace boost;static int alloc_count = 0;static int dealloc_count = 0;template<typename T>struct counting_allocator : public std::allocator<T>{ template<typename U> struct rebind { typedef counting_allocator<U> other; }; counting_allocator() { } template<typename U> counting_allocator( counting_allocator<U> ) { } T* allocate(std::size_t n) { alloc_count++; return std::allocator<T>::allocate(n); } void deallocate(T* p, std::size_t n) { dealloc_count++; std::allocator<T>::deallocate(p, n); }};struct enable_small_object_optimization{};struct disable_small_object_optimization{ int unused_state_data[32];};template <typename base>struct plus_int: base{ int operator()(int x, int y) const { return x + y; }};static int do_minus(int x, int y) { return x-y; }template <typename base>struct DoNothing: base{ void operator()() const {}};static void do_nothing() {}inttest_main(int, char*[]){ function2<int, int, int> f; f.assign( plus_int<disable_small_object_optimization>(), counting_allocator<int>() ); f.clear(); BOOST_CHECK(alloc_count == 1); BOOST_CHECK(dealloc_count == 1); alloc_count = 0; dealloc_count = 0; f.assign( plus_int<enable_small_object_optimization>(), counting_allocator<int>() ); f.clear(); BOOST_CHECK(alloc_count == 0); BOOST_CHECK(dealloc_count == 0); f.assign( plus_int<disable_small_object_optimization>(), std::allocator<int>() ); f.clear(); f.assign( plus_int<enable_small_object_optimization>(), std::allocator<int>() ); f.clear(); alloc_count = 0; dealloc_count = 0; f.assign( &do_minus, counting_allocator<int>() ); f.clear(); BOOST_CHECK(alloc_count == 0); BOOST_CHECK(dealloc_count == 0); f.assign( &do_minus, std::allocator<int>() ); f.clear(); function0<void> fv; alloc_count = 0; dealloc_count = 0; fv.assign( DoNothing<disable_small_object_optimization>(), counting_allocator<int>() ); fv.clear(); BOOST_CHECK(alloc_count == 1); BOOST_CHECK(dealloc_count == 1); alloc_count = 0; dealloc_count = 0; fv.assign( DoNothing<enable_small_object_optimization>(), counting_allocator<int>() ); fv.clear(); BOOST_CHECK(alloc_count == 0); BOOST_CHECK(dealloc_count == 0); fv.assign( DoNothing<disable_small_object_optimization>(), std::allocator<int>() ); fv.clear(); fv.assign( DoNothing<enable_small_object_optimization>(), std::allocator<int>() ); fv.clear(); alloc_count = 0; dealloc_count = 0; fv.assign( &do_nothing, counting_allocator<int>() ); fv.clear(); BOOST_CHECK(alloc_count == 0); BOOST_CHECK(dealloc_count == 0); fv.assign( &do_nothing, std::allocator<int>() ); fv.clear(); return 0;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?