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:
Tom Tromey
2020-04-20 11:45:06 -06:00
parent 9b2c992cfa
commit 0fa7617d84
9 changed files with 31 additions and 18 deletions

View File

@ -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;
}