3


0

Boostの `bcp smart_ptr dir /`が6MBのソースコードをコピーしたのはなぜですか?

そこで、プロジェクトで使用するブーストからスマートポインターだけを分離したかったため、「bcp」ユーティリティを使用するように誘導されました。

今日、コンパイルして「bcp smart_ptr to_copy_to_my_project /」を実行しました。

結果: `to_copy_to_my_project /`ディレクトリにある6MBのコード。

私をからかってるの? スマートポインターを使用するためだけに、6MBのヘッダーファイルを100KBプロジェクトに追加したくありません。

たとえば、次の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でwin32をsmart_ptrでコピーするのはなぜですか?

また:

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

And:

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が必要です!

私は何か悪いことをしましたか? スマートポインター用に6 MBのコードをコピーしたのはなぜですか。私は10 KBまたは20 KBになると予想しています…​

ありがとう、Boda Cydo。

5 Answer


1


必要なのが smart_ptr`で、 BOOST_SP_USE_QUICK_ALLOCATOR`(デフォルトでは定義されていない)の #define 'に興味がない場合、必要なのは以下だけです:

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」にあります。


0


stlの共有ポインタを使用することができます: `std

tr1 :: shared_ptr`。これはすべての意図と目的のために` boost :: shared_ptr`です。


0


testフォルダーとwin32フォルダーを削除できると思われます。これらはおそらく、テスト時またはそのプラットフォームでのみ含まれています。 ほとんどのヘッダーファイルと話すことはできませんが、smart_ptrは多くのクレイジーな処理を行うので、boost

shared_ptrをboost :: shared_ptrに変換できますが、ほとんどのテンプレートではできません。 数個のファイルにしか収まらないカウントポインターが必要な場合は、1つを書くのは難しくありませんが、boostほど良いものではありません。

あなたはLinuxを使用していると言っているので、なぜブーストを依存関係としてリストアップしないのですか?


0


ブーストは無数のプラットフォームとコンパイラをサポートし、ブーストモジュールは他のブーストモジュールを自由に使用するためです。 そのほとんどが#ifdef:edになりますが、bcpはそれを行うのに十分スマートではありません。

同様の問題があったので、あなたの懸念を理解しています。 プラットフォーム設定なしでプリプロセッサを実行しようとすると、コードが大幅に小さくなりました。

最終的に、コンパイラをC ++ tr1をサポートするバージョンにアップグレードし、std

tr1 :: shared_ptrを使用しました。

6Megsは業界標準のスマートポインターに支払うわずかな価格であると主張するかもしれませんが、すべての開発者/アーキテクトが同じように感じるわけではなく、私はまだ専制ではないので、チームが決定したものを採用しなければなりませんでした。


0


コピーした場合、 `bcp`のコピーはずっと少なくなります

bcp shared_ptr.hpp to_copy_to_my_project/.

まだ多すぎるように思えます、私は同意します。