私のチームでは、特定のコンテキストでのポインター コンテナーの使用について意見の相違があります。考えてください:
int main() {
// Top level. This is an important fact to the context
// i.e. that the following instance is at this level
// so that its members are essentially at program scope.
MainClass mainClass;
mainClass.run();
}
// A instance of a class derived from Buffer does something very complex
// (it has various handles to resources/allocated memory) so that you would
// never want to copy an instance.
class Buffer;
class MainClass {
#make_decision_here_based_on_stack_overflow_responses
shared_ptr<Buffer> buffer; // 1
scoped_ptr<Buffer> buffer; // 2
#end_decision
MainClass() {
// non-trivial initialisation of buffer with any of a number of derived classes:
buffer.reset( ... )
}
void run() {
#make_decision_here_based_on_stack_overflow_responses
SomeSubservientClass sub(*buffer); // a
SomeSubservientClass sub(buffer.get()); // b
SomeSubservientClass sub(buffer); // c
#end_decision
sub.do_stuff()
}
};
(実際には存在しない特別なプリプロセッサ コードがここにあることを理解していただければ幸いです。
私たちが現在持っているコードは状態 "1b" (shared_ptr メンバー、裸の ptr を渡す) にありますが、これはあるべき姿ではないと考えています。一見しただけで、最も自然で合理的で安全な行動と正当化がどのようなものであるかを知りたいと思います。または、誰かが「3」または「d」を提案したい場合. 私自身も意見はありますが、まだ共有したくありません。