この元のコード、
class A {
A() :
max_(0),
num_(0),
sum_(0),
sum_squares_(0) {}
void Clear() {
min_ = bucketMapper.LastValue();
max_ = 0;
num_ = 0;
sum_ = 0;
sum_squares_ = 0;
}
void SomethingElse {}
}
引数リストとセミコロンがないためにコンパイルされずmin_
、デフォルトコンストラクターでの初期化に失敗し、そのメンバーに不確定な値が残り、そこにあるすべてのものにアクセスできなくなります。
本当にmin_
違う、新しい価値を与えたいClear
ですか?
そうでない場合は、デフォルトで構築されたインスタンスを割り当てるだけです。
*this = A();
コンストラクターから呼び出すClear
ことは、一般的には良い考えではありません。これは、主に、割り当ての観点から構文を表現するという不適切な習慣に非常に似ているため、そうするように誘惑する可能性があるためです。
より一般的な解決策については、純粋なデータを除外してください。
namespace detail {
struct A_Data
{
double min_;
double max_;
int num_;
double sum_;
};
} // namespace detail
class A
: private detail::A_Data
{
public:
A(): detail::A_Data() {}
void clear()
{
*this = A();
min_ = bucketMapper.LastValue();
}
void somethingElse() {}
};
しかし、おそらく
*this = A();
あなたのニーズの解決策として行います。
-実際のコードではない場合は-1。今後の質問で実際のコードを投稿してください。そんな感じではありません。