mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2025-02-07 06:30:11 +00:00
Safer copy constructor and copy assignment operator for Gnss_Satellite
Fix clang-tidy bugprone-exception-escape warnings
This commit is contained in:
parent
a48e0fee23
commit
6757adf8d5
@ -78,11 +78,22 @@ bool operator==(const Gnss_Satellite& sat1, const Gnss_Satellite& sat2)
|
|||||||
|
|
||||||
// Copy constructor
|
// Copy constructor
|
||||||
Gnss_Satellite::Gnss_Satellite(const Gnss_Satellite& other) noexcept
|
Gnss_Satellite::Gnss_Satellite(const Gnss_Satellite& other) noexcept
|
||||||
: system(other.system),
|
: PRN(other.PRN),
|
||||||
block(other.block),
|
|
||||||
PRN(other.PRN),
|
|
||||||
rf_link(other.rf_link)
|
rf_link(other.rf_link)
|
||||||
{
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
system = other.system;
|
||||||
|
block = other.block;
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
// Handle failure by creating a valid but empty object
|
||||||
|
system.clear();
|
||||||
|
block.clear();
|
||||||
|
PRN = 0;
|
||||||
|
rf_link = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -92,10 +103,22 @@ Gnss_Satellite& Gnss_Satellite::operator=(const Gnss_Satellite& rhs) noexcept
|
|||||||
// Only do assignment if RHS is a different object from this.
|
// Only do assignment if RHS is a different object from this.
|
||||||
if (this != &rhs)
|
if (this != &rhs)
|
||||||
{
|
{
|
||||||
this->system = rhs.system;
|
try
|
||||||
this->block = rhs.block;
|
{
|
||||||
this->PRN = rhs.PRN;
|
// Copy strings first
|
||||||
this->rf_link = rhs.rf_link;
|
std::string tmp_system = rhs.system;
|
||||||
|
std::string tmp_block = rhs.block;
|
||||||
|
|
||||||
|
// If we get here, string copies succeeded
|
||||||
|
system = std::move(tmp_system);
|
||||||
|
block = std::move(tmp_block);
|
||||||
|
PRN = rhs.PRN;
|
||||||
|
rf_link = rhs.rf_link;
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
// Keep object in valid state by not modifying it
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user