Make library buildable with -Werror=effc++

Adding initialization of several members to avoid the
error: ... should be initialized in the member initialization list

Deleting copy constructors and assignment operators for classes
with pointer data member to avoid the
error: ... has pointer data members but does not override ...
This commit is contained in:
Florian Kauer 2019-02-21 11:12:24 +01:00
parent e326df211b
commit 74ebbd2912
10 changed files with 100 additions and 18 deletions

View File

@ -52,6 +52,16 @@ class binary_reader
assert(ia);
}
~binary_reader() = default;
// delete copy constructor and assignment operator since
// exclusive access to the input adapter is assumed
binary_reader(const binary_reader&) = delete;
binary_reader& operator=(const binary_reader&) = delete;
binary_reader(binary_reader&&) = default;
binary_reader& operator=(binary_reader&&) = default;
/*!
@param[in] format the binary format to parse
@param[in] sax_ a SAX event processor

View File

@ -58,6 +58,14 @@ class file_input_adapter : public input_adapter_protocol
: m_file(f)
{}
// this class is only a wrapper around the file pointer and does
// not own it, so the defaults are safe
~file_input_adapter() = default;
file_input_adapter(const file_input_adapter&) = default;
file_input_adapter& operator=(const file_input_adapter&) = default;
file_input_adapter(file_input_adapter&&) = default;
file_input_adapter& operator=(file_input_adapter&&) = default;
std::char_traits<char>::int_type get_character() noexcept override
{
return std::fgetc(m_file);

View File

@ -158,6 +158,16 @@ class json_sax_dom_parser
: root(r), allow_exceptions(allow_exceptions_)
{}
~json_sax_dom_parser() = default;
// delete copy constructor and assignment operator since
// exclusive access to the JSON value to be manipulated is assumed
json_sax_dom_parser(const json_sax_dom_parser&) = delete;
json_sax_dom_parser& operator=(const json_sax_dom_parser&) = delete;
json_sax_dom_parser(json_sax_dom_parser&&) = default;
json_sax_dom_parser& operator=(json_sax_dom_parser&&) = default;
bool null()
{
handle_value(nullptr);
@ -306,7 +316,7 @@ class json_sax_dom_parser
/// the parsed JSON value
BasicJsonType& root;
/// stack to model hierarchy of values
std::vector<BasicJsonType*> ref_stack;
std::vector<BasicJsonType*> ref_stack {};
/// helper to hold the reference for the next object element
BasicJsonType* object_element = nullptr;
/// whether a syntax error occurred
@ -334,6 +344,16 @@ class json_sax_dom_callback_parser
keep_stack.push_back(true);
}
~json_sax_dom_callback_parser() = default;
// delete copy constructor and assignment operator since
// exclusive access to the JSON value to be manipulated is assumed
json_sax_dom_callback_parser(const json_sax_dom_callback_parser&) = delete;
json_sax_dom_callback_parser& operator=(const json_sax_dom_callback_parser&) = delete;
json_sax_dom_callback_parser(json_sax_dom_callback_parser&&) = default;
json_sax_dom_callback_parser& operator=(json_sax_dom_callback_parser&&) = default;
bool null()
{
handle_value(nullptr);
@ -611,11 +631,11 @@ class json_sax_dom_callback_parser
/// the parsed JSON value
BasicJsonType& root;
/// stack to model hierarchy of values
std::vector<BasicJsonType*> ref_stack;
std::vector<BasicJsonType*> ref_stack {};
/// stack to manage which values to keep
std::vector<bool> keep_stack;
std::vector<bool> keep_stack {};
/// stack to manage which object keys to keep
std::vector<bool> key_keep_stack;
std::vector<bool> key_keep_stack {};
/// helper to hold the reference for the next object element
BasicJsonType* object_element = nullptr;
/// whether a syntax error occurred

View File

@ -1483,7 +1483,7 @@ scan_number_done:
bool next_unget = false;
/// the start position of the current token
position_t position;
position_t position {};
/// raw input token string (for error messages)
std::vector<char> token_string {};

View File

@ -607,7 +607,7 @@ class iter_impl
/// associated JSON instance
pointer m_object = nullptr;
/// the actual iterator of the associated instance
internal_iterator<typename std::remove_const<BasicJsonType>::type> m_it;
internal_iterator<typename std::remove_const<BasicJsonType>::type> m_it {};
};
} // namespace detail
} // namespace nlohmann
} // namespace nlohmann

View File

@ -2222,6 +2222,14 @@ class file_input_adapter : public input_adapter_protocol
: m_file(f)
{}
// this class is only a wrapper around the file pointer and does
// not own it, so the defaults are safe
~file_input_adapter() = default;
file_input_adapter(const file_input_adapter&) = default;
file_input_adapter& operator=(const file_input_adapter&) = default;
file_input_adapter(file_input_adapter&&) = default;
file_input_adapter& operator=(file_input_adapter&&) = default;
std::char_traits<char>::int_type get_character() noexcept override
{
return std::fgetc(m_file);
@ -4074,7 +4082,7 @@ scan_number_done:
bool next_unget = false;
/// the start position of the current token
position_t position;
position_t position {};
/// raw input token string (for error messages)
std::vector<char> token_string {};
@ -4420,6 +4428,16 @@ class json_sax_dom_parser
: root(r), allow_exceptions(allow_exceptions_)
{}
~json_sax_dom_parser() = default;
// delete copy constructor and assignment operator since
// exclusive access to the JSON value to be manipulated is assumed
json_sax_dom_parser(const json_sax_dom_parser&) = delete;
json_sax_dom_parser& operator=(const json_sax_dom_parser&) = delete;
json_sax_dom_parser(json_sax_dom_parser&&) = default;
json_sax_dom_parser& operator=(json_sax_dom_parser&&) = default;
bool null()
{
handle_value(nullptr);
@ -4568,7 +4586,7 @@ class json_sax_dom_parser
/// the parsed JSON value
BasicJsonType& root;
/// stack to model hierarchy of values
std::vector<BasicJsonType*> ref_stack;
std::vector<BasicJsonType*> ref_stack {};
/// helper to hold the reference for the next object element
BasicJsonType* object_element = nullptr;
/// whether a syntax error occurred
@ -4596,6 +4614,16 @@ class json_sax_dom_callback_parser
keep_stack.push_back(true);
}
~json_sax_dom_callback_parser() = default;
// delete copy constructor and assignment operator since
// exclusive access to the JSON value to be manipulated is assumed
json_sax_dom_callback_parser(const json_sax_dom_callback_parser&) = delete;
json_sax_dom_callback_parser& operator=(const json_sax_dom_callback_parser&) = delete;
json_sax_dom_callback_parser(json_sax_dom_callback_parser&&) = default;
json_sax_dom_callback_parser& operator=(json_sax_dom_callback_parser&&) = default;
bool null()
{
handle_value(nullptr);
@ -4873,11 +4901,11 @@ class json_sax_dom_callback_parser
/// the parsed JSON value
BasicJsonType& root;
/// stack to model hierarchy of values
std::vector<BasicJsonType*> ref_stack;
std::vector<BasicJsonType*> ref_stack {};
/// stack to manage which values to keep
std::vector<bool> keep_stack;
std::vector<bool> keep_stack {};
/// stack to manage which object keys to keep
std::vector<bool> key_keep_stack;
std::vector<bool> key_keep_stack {};
/// helper to hold the reference for the next object element
BasicJsonType* object_element = nullptr;
/// whether a syntax error occurred
@ -6223,10 +6251,11 @@ class iter_impl
/// associated JSON instance
pointer m_object = nullptr;
/// the actual iterator of the associated instance
internal_iterator<typename std::remove_const<BasicJsonType>::type> m_it;
internal_iterator<typename std::remove_const<BasicJsonType>::type> m_it {};
};
} // namespace detail
} // namespace nlohmann
// #include <nlohmann/detail/iterators/iteration_proxy.hpp>
// #include <nlohmann/detail/iterators/json_reverse_iterator.hpp>
@ -6532,6 +6561,16 @@ class binary_reader
assert(ia);
}
~binary_reader() = default;
// delete copy constructor and assignment operator since
// exclusive access to the input adapter is assumed
binary_reader(const binary_reader&) = delete;
binary_reader& operator=(const binary_reader&) = delete;
binary_reader(binary_reader&&) = default;
binary_reader& operator=(binary_reader&&) = default;
/*!
@param[in] format the binary format to parse
@param[in] sax_ a SAX event processor

View File

@ -149,7 +149,7 @@ class alt_string
}
private:
std::string str_impl;
std::string str_impl {};
friend bool ::operator<(const char*, const alt_string&);
};

View File

@ -125,7 +125,7 @@ class SaxEventLogger
return false;
}
std::vector<std::string> events;
std::vector<std::string> events {};
bool errored = false;
};

View File

@ -123,7 +123,7 @@ struct SaxEventLogger : public nlohmann::json_sax<json>
return false;
}
std::vector<std::string> events;
std::vector<std::string> events {};
};
struct SaxEventLoggerExitAfterStartObject : public SaxEventLogger

View File

@ -124,8 +124,13 @@ struct nocopy
struct Data
{
std::string a;
std::string b;
Data() {}
Data(std::string a, std::string b)
: a(std::move(a)), b(std::move(b)) {}
std::string a {};
std::string b {};
};
void from_json(const json& j, Data& data)