Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c++ > #86032
| From | Paavo Helde <eesnimi@osa.pri.ee> |
|---|---|
| Newsgroups | comp.lang.c++ |
| Subject | Re: Is it possible to test if a raw pointer is pointing to a valid object? |
| Date | 2022-08-24 20:24 +0300 |
| Organization | A noiseless patient Spider |
| Message-ID | <te5mrp$3ceup$1@dont-email.me> (permalink) |
| References | <te5lf8$3camt$1@dont-email.me> |
24.08.2022 20:00 JiiPee kirjutas:
> First the code. The question below it:
>
> ------------------------
> class Parent
> {
> public:
> void foo2() {}
> };
>
> class Child
> {
> public:
> Parent* m_parent{nullptr};
> void foo() {
> // can the validity of the raw pointer m_parent be checked?
> m_parent->foo2();
> }
> };
>
> void main()
> {
> Parent* parent = new Parent;
> Child child;
> child.m_parent = parent;
> delete parent;
> child.foo(); // any way this call knowing parent is now deleted?
No, there isn't any way. At best you can check if a pointer points to
memory page which is readable or writable for the process, but that does
not help much.
>
> }
>
> ------------------
>
> Is there any way to check if a raw pointer is pointing to a valid object?
> Because I have situations where I can only store raw pointers.
> I know it can be done with shared pointers, but how about raw pointers?
> Assuming I cannot change the Parent class in the above example.
> Or is there any pattern applied to Child class... again assuming we
> cannot change the Parent class at all.
The tedious way is to not delete parent without informing all the
children that the parent is dead.
A smarter pattern is smart pointers. You do not need to modify Parent
class for using smart pointers on it.
class Child
{
public:
std::weak_ptr<Parent> m_parent;
void foo() {
if (auto parent = m_parent.lock()) {
parent->foo2();
}
}
};
void main()
{
std::shared_ptr parent = std::allocate_shared<Parent>();
Child child;
child.m_parent = parent;
parent = nullptr; // deletes parent
child.foo(); // OK
}
Back to comp.lang.c++ | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Is it possible to test if a raw pointer is pointing to a valid object? JiiPee <kerrttuPoistaTama11@gmail.com> - 2022-08-24 20:00 +0300
Re: Is it possible to test if a raw pointer is pointing to a valid object? Paavo Helde <eesnimi@osa.pri.ee> - 2022-08-24 20:24 +0300
Re: Is it possible to test if a raw pointer is pointing to a valid object? Paavo Helde <eesnimi@osa.pri.ee> - 2022-08-24 20:28 +0300
Re: Is it possible to test if a raw pointer is pointing to a valid object? JiiPee <kerrttuPoistaTama11@gmail.com> - 2022-08-24 20:39 +0300
Re: Is it possible to test if a raw pointer is pointing to a valid object? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2022-08-24 10:44 -0700
Re: Is it possible to test if a raw pointer is pointing to a valid object? JiiPee <kerrttuPoistaTama11@gmail.com> - 2022-08-24 20:51 +0300
Re: Is it possible to test if a raw pointer is pointing to a valid object? JiiPee <kerrttuPoistaTama11@gmail.com> - 2022-08-24 20:52 +0300
Re: Is it possible to test if a raw pointer is pointing to a valid object? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2022-08-24 11:59 -0700
Re: Is it possible to test if a raw pointer is pointing to a valid object? Manfred <noname@add.invalid> - 2022-08-26 02:26 +0200
Re: Is it possible to test if a raw pointer is pointing to a valid object? JiiPee <kerrttuPoistaTama11@gmail.com> - 2022-08-24 20:41 +0300
Re: Is it possible to test if a raw pointer is pointing to a valid object? Louis Krupp <lkrupp@invalid.pssw.com.invalid> - 2022-08-24 13:51 -0600
Re: Is it possible to test if a raw pointer is pointing to a valid object? Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2022-08-24 12:45 -0700
Re: Is it possible to test if a raw pointer is pointing to a valid object? JiiPee <kerrttuPoistaTama11@gmail.com> - 2022-08-24 23:17 +0300
Re: Is it possible to test if a raw pointer is pointing to a valid object? scott@slp53.sl.home (Scott Lurndal) - 2022-08-24 20:54 +0000
Re: Is it possible to test if a raw pointer is pointing to a valid object? Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2022-08-24 14:57 -0700
Re: Is it possible to test if a raw pointer is pointing to a valid object? Vir Campestris <vir.campestris@invalid.invalid> - 2022-08-25 12:52 +0100
Re: Is it possible to test if a raw pointer is pointing to a valid object? Sam <sam@email-scan.com> - 2022-08-24 20:21 -0400
Re: Is it possible to test if a raw pointer is pointing to a valid object? Bonita Montero <Bonita.Montero@gmail.com> - 2022-08-25 07:39 +0200
Re: Is it possible to test if a raw pointer is pointing to a valid object? Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2022-08-25 03:37 -0700
Re: Is it possible to test if a raw pointer is pointing to a valid object? Sam <sam@email-scan.com> - 2022-08-25 09:37 -0400
Re: Is it possible to test if a raw pointer is pointing to a valid object? JiiPee <kerrttuPoistaTama11@gmail.com> - 2022-08-25 17:28 +0300
Re: Is it possible to test if a raw pointer is pointing to a valid object? Sam <sam@email-scan.com> - 2022-08-25 19:39 -0400
Re: Is it possible to test if a raw pointer is pointing to a valid object? Paul N <gw7rib@aol.com> - 2022-08-26 05:49 -0700
Re: Is it possible to test if a raw pointer is pointing to a valid object? JiiPee <kerrttuPoistaTama11@gmail.com> - 2022-08-26 19:35 +0300
Re: Is it possible to test if a raw pointer is pointing to a valid object? Louis Krupp <lkrupp@invalid.pssw.com.invalid> - 2022-08-26 12:25 -0600
Re: Is it possible to test if a raw pointer is pointing to a valid object? "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2022-08-25 11:38 -0700
Re: Is it possible to test if a raw pointer is pointing to a valid object? Lynn McGuire <lynnmcguire5@gmail.com> - 2022-08-26 16:08 -0500
csiph-web