[Bug c++/85858] -Weffc++ should not require copy ctor for const pointers
redi at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue May 22 08:25:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85858
--- Comment #10 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Mike Sharov from comment #8)
> My mental model here is actually of const correctness, not C++ specifically.
> When I pass around a const object I expect it to stay unmodified. Consider a
> function that takes a const T* argument. The signature suggests that the
> passed-in object will only be read and will not be modified.
No, no, no. It says **that function** can't modify it **through that pointer**.
If the pointee was not actually declared const then it can still be changed.
> If that
> function deletes the pointer, "bad things" will likely happen. Suddenly the
> object contains garbage and you can't figure out how it happened.
Your assumption that const T* means the pointer remains valid is just
completely unjustifiable:
int* p = new int();
const int* pc = p;
delete p;
// pc is valid here, nobody can delete it due to "const correctness" (wrong)
It's simply not how C++ works. An object's lifetime is distinct from it's
constness, and a pointer-to-const doesn't imply anything about whether the
pointed-to object is immutable.
More information about the Gcc-bugs
mailing list