Mark move constructors as "noexcept"
I recently learned that move constructors generally should be marked "noexcept". This ensures that standard containers will move objects when possible, rather than copy them. This patch fixes the cases I could find. Note that implicitly-defined or defaulted move constructors will automatically do what you'd expect; that is, they are noexcept if all the members have noexcept move constructors. While doing this, I noticed a couple of odd cases where the move constructor seemed to assume that the object being constructed could have state requiring destruction. I've fixed these as well. See completion_result and scoped_mmap. gdb/ChangeLog 2020-04-20 Tom Tromey <tromey@adacore.com> * python/python.c (struct gdbpy_event): Mark move constructor as noexcept. * python/py-tui.c (class gdbpy_tui_window_maker): Mark move constructor as noexcept. * completer.h (struct completion_result): Mark move constructor as noexcept. * completer.c (completion_result::completion_result): Use initialization style. Don't call reset_match_list. gdbsupport/ChangeLog 2020-04-20 Tom Tromey <tromey@adacore.com> * scoped_mmap.h (scoped_mmap): Mark move constructor as noexcept. Use initialization style. Don't call destroy. * scoped_fd.h (class scoped_fd): Mark move constructor as noexcept. * gdb_ref_ptr.h (class ref_ptr): Mark move constructor as noexcept.
This commit is contained in:
parent
9b2c992cfa
commit
0fa7617d84
@ -1,3 +1,14 @@
|
||||
2020-04-20 Tom Tromey <tromey@adacore.com>
|
||||
|
||||
* python/python.c (struct gdbpy_event): Mark move constructor as
|
||||
noexcept.
|
||||
* python/py-tui.c (class gdbpy_tui_window_maker): Mark move
|
||||
constructor as noexcept.
|
||||
* completer.h (struct completion_result): Mark move constructor as
|
||||
noexcept.
|
||||
* completer.c (completion_result::completion_result): Use
|
||||
initialization style. Don't call reset_match_list.
|
||||
|
||||
2020-04-20 Mihails Strasuns <mihails.strasuns@intel.com>
|
||||
|
||||
* MAINTAINERS (Write After Approval): Add myself.
|
||||
|
@ -2327,15 +2327,11 @@ completion_result::~completion_result ()
|
||||
|
||||
/* See completer.h */
|
||||
|
||||
completion_result::completion_result (completion_result &&rhs)
|
||||
completion_result::completion_result (completion_result &&rhs) noexcept
|
||||
: match_list (rhs.match_list),
|
||||
number_matches (rhs.number_matches)
|
||||
{
|
||||
if (this == &rhs)
|
||||
return;
|
||||
|
||||
reset_match_list ();
|
||||
match_list = rhs.match_list;
|
||||
rhs.match_list = NULL;
|
||||
number_matches = rhs.number_matches;
|
||||
rhs.number_matches = 0;
|
||||
}
|
||||
|
||||
|
@ -242,7 +242,7 @@ struct completion_result
|
||||
DISABLE_COPY_AND_ASSIGN (completion_result);
|
||||
|
||||
/* Move a result. */
|
||||
completion_result (completion_result &&rhs);
|
||||
completion_result (completion_result &&rhs) noexcept;
|
||||
|
||||
/* Release ownership of the match list array. */
|
||||
char **release_match_list ();
|
||||
|
@ -233,7 +233,7 @@ public:
|
||||
|
||||
~gdbpy_tui_window_maker ();
|
||||
|
||||
gdbpy_tui_window_maker (gdbpy_tui_window_maker &&other)
|
||||
gdbpy_tui_window_maker (gdbpy_tui_window_maker &&other) noexcept
|
||||
: m_constr (std::move (other.m_constr))
|
||||
{
|
||||
}
|
||||
|
@ -975,7 +975,7 @@ struct gdbpy_event
|
||||
{
|
||||
}
|
||||
|
||||
gdbpy_event (gdbpy_event &&other)
|
||||
gdbpy_event (gdbpy_event &&other) noexcept
|
||||
: m_func (other.m_func)
|
||||
{
|
||||
other.m_func = nullptr;
|
||||
|
@ -1,3 +1,12 @@
|
||||
2020-04-20 Tom Tromey <tromey@adacore.com>
|
||||
|
||||
* scoped_mmap.h (scoped_mmap): Mark move constructor as noexcept.
|
||||
Use initialization style. Don't call destroy.
|
||||
* scoped_fd.h (class scoped_fd): Mark move constructor as
|
||||
noexcept.
|
||||
* gdb_ref_ptr.h (class ref_ptr): Mark move constructor as
|
||||
noexcept.
|
||||
|
||||
2020-04-13 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* event-loop.c: Move comment. Remove obsolete comment.
|
||||
|
@ -78,7 +78,7 @@ class ref_ptr
|
||||
}
|
||||
|
||||
/* Transfer ownership from OTHER. */
|
||||
ref_ptr (ref_ptr &&other)
|
||||
ref_ptr (ref_ptr &&other) noexcept
|
||||
: m_obj (other.m_obj)
|
||||
{
|
||||
other.m_obj = NULL;
|
||||
|
@ -30,7 +30,7 @@ class scoped_fd
|
||||
public:
|
||||
explicit scoped_fd (int fd = -1) noexcept : m_fd (fd) {}
|
||||
|
||||
scoped_fd (scoped_fd &&other)
|
||||
scoped_fd (scoped_fd &&other) noexcept
|
||||
: m_fd (other.m_fd)
|
||||
{
|
||||
other.m_fd = -1;
|
||||
|
@ -42,13 +42,10 @@ public:
|
||||
destroy ();
|
||||
}
|
||||
|
||||
scoped_mmap (scoped_mmap &&rhs)
|
||||
scoped_mmap (scoped_mmap &&rhs) noexcept
|
||||
: m_mem (rhs.m_mem),
|
||||
m_length (rhs.m_length)
|
||||
{
|
||||
destroy ();
|
||||
|
||||
m_mem = rhs.m_mem;
|
||||
m_length = rhs.m_length;
|
||||
|
||||
rhs.m_mem = MAP_FAILED;
|
||||
rhs.m_length = 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user