所以我想在我的项目中分离出从提升到使用的智能指针,我被引导使用bcp
实用程序。
今天我编译完了bcp smart_ptr to_copy_to_my_project/
。
结果:to_copy_to_my_project/
目录中有6MB的代码。
例如,它复制了以下win32内容(我在Linux上):
Copying file: boost/thread/win32/basic_timed_mutex.hpp
Copying file: boost/thread/win32/condition_variable.hpp
Copying file: boost/thread/win32/interlocked_read.hpp
为什么我在Linux上时会使用smart_ptr复制win32内容?
此外:
Copying file: boost/mpl/aux_/preprocessed/msvc60/advance_backward.hpp
...
Copying file: boost/mpl/aux_/preprocessed/msvc70/advance_backward.hpp
...
Copying file: boost/mpl/aux_/preprocessed/mwcw/advance_backward.hpp
和
Copying file: boost/date_time/adjust_functors.hpp
为什么smart_ptr依赖于date_time?
那么它复制的所有这些测试呢:
Copying file: libs/smart_ptr/test/allocate_shared_esft_test.cpp
...
我不需要它!我只需要smart_ptr!
我做错了什么吗?为什么它只为智能指针复制6MB代码,我希望它是10KB或20KB ......
谢谢,Boda Cydo。
答案 0 :(得分:1)
如果你想要的只是smart_ptr
并且你对#define
'BOOST_SP_USE_QUICK_ALLOCATOR
感兴趣(默认情况下没有定义),你只需要:
boost/assert.hpp
boost/checked_delete.hpp
boost/config.hpp
boost/config/compiler/*
boost/config/no_tr1/functional.hpp
boost/config/no_tr1/memory.hpp
boost/config/no_tr1/utility.hpp
boost/config/platform/*
boost/config/posix_features.hpp
boost/config/select_compiler_config.hpp
boost/config/select_platform_config.hpp
boost/config/select_stdlib_config.hpp
boost/config/stdlib/*
boost/config/suffix.hpp
boost/config/user.hpp
boost/current_function.hpp
boost/detail/interlocked.hpp
boost/detail/sp_typeinfo.hpp
boost/detail/workaround.hpp
boost/enable_shared_from_this.hpp
boost/exception/detail/attribute_noreturn.hpp
boost/exception/exception.hpp
boost/memory_order.hpp
boost/non_type.hpp
boost/shared_ptr.hpp
boost/smart_ptr/*
boost/throw_exception.hpp
boost/type.hpp
这是365k,其中大部分代码实际上在boost/smart_ptr
。 boost/config
中仍有很多代码。如果您知道自己定位的平台,则可以关注boost/config/compiler
,boost/config/platform
和boost/config/stdlib
。然后绝大多数代码都在boost/smart_ptr
。
答案 1 :(得分:0)
您可以使用stl的共享指针:std::tr1::shared_ptr
,其中所有意图和目的都是“boost::shared_ptr
。
答案 2 :(得分:0)
我怀疑您可以删除test和win32文件夹 - 它们可能仅在测试时或在该平台上包含。我不能说大多数头文件,但我知道smart_ptr做了很多疯狂的事情,所以你可以转换boost :: shared_ptr< Foo>进入boost :: shared_ptr< const Foo>,大多数模板都做不到。如果你想要一个仅适合几个文件的计数指针,那么编写一个并不难,但它不会像boost一样好。
既然你说你在Linux上,为什么不把boost列为依赖?
答案 3 :(得分:0)
原因是boost支持无数平台和编译器以及升压模块使用其他升压模块。即使大部分都是#ifdef:ed,但是bcp还不够智能。
我有类似的问题所以我理解你的担忧。我尝试使用平台设置运行预处理器,然后代码变得非常小。
最后我们将编译器升级到支持C ++ tr1的版本并使用std :: tr1 :: shared_ptr。
有人可能会说,6Megs是支付行业标准智能指针的一个小代价,但并非所有的开发人员/架构师都有同样的感觉,因为我不是暴君,但我不得不接受团队决定的事情。
答案 4 :(得分:0)
bcp
会复制很多
bcp shared_ptr.hpp to_copy_to_my_project/.
我认为这似乎太过分了。