Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. How to check pointer object isExist before?
QtWS25 Last Chance

How to check pointer object isExist before?

Scheduled Pinned Locked Moved Solved General and Desktop
11 Posts 5 Posters 1.9k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    MimCimm
    wrote on last edited by
    #1

    Hello Everyone!
    Are there any way to control pointer object created before.
    Specifically:

    ---x.h---

    MyClass *myClassObject;
    

    ---x.cpp---

    void methodX(){
    //Here is line that I want to check that myClasssObject is created or not?
    delete myClasssObject;
    myClasssObject = new MyClassObject();
    ...
    }
    

    Because I trigger methodX() with QTimer periyodically so that I need o know is it created before if created then I will detele old one.
    I should do do that otherwise every trigger increase thread count in OS.

    Any Help ,I will be gratified..

    JonBJ 1 Reply Last reply
    0
    • M MimCimm

      Hello Everyone!
      Are there any way to control pointer object created before.
      Specifically:

      ---x.h---

      MyClass *myClassObject;
      

      ---x.cpp---

      void methodX(){
      //Here is line that I want to check that myClasssObject is created or not?
      delete myClasssObject;
      myClasssObject = new MyClassObject();
      ...
      }
      

      Because I trigger methodX() with QTimer periyodically so that I need o know is it created before if created then I will detele old one.
      I should do do that otherwise every trigger increase thread count in OS.

      Any Help ,I will be gratified..

      JonBJ Offline
      JonBJ Offline
      JonB
      wrote on last edited by
      #2

      @MimCimm
      I don't fully understand. You cannot check that a pointer is valid/points to something valid safely in C++. You can, however, initialize it yourself. So initialize it to nullptr, and if you delete it reset it to nullptr so that you can test that in the future.

      M 1 Reply Last reply
      2
      • sierdzioS Offline
        sierdzioS Offline
        sierdzio
        Moderators
        wrote on last edited by
        #3

        A pointer is just an integer - if you make sure to set it to nullptr when it's not created, you can simply check with if:

        if (myClassObject) {
          delete myClassObject;
          myClassObject = nullptr;
        }
        

        Alternatively, you can use QPointer and it's isNull() method - if your MyClass is a subclass of QObject.

        (Z(:^

        M 1 Reply Last reply
        2
        • JonBJ JonB

          @MimCimm
          I don't fully understand. You cannot check that a pointer is valid/points to something valid safely in C++. You can, however, initialize it yourself. So initialize it to nullptr, and if you delete it reset it to nullptr so that you can test that in the future.

          M Offline
          M Offline
          MimCimm
          wrote on last edited by
          #4

          @JonB If I initialize with nullptr than I am losing old created object before delete it. But old thread still countinue to work when I check OS from linux terminal.

          sierdzioS JonBJ 2 Replies Last reply
          0
          • jeremy_kJ Offline
            jeremy_kJ Offline
            jeremy_k
            wrote on last edited by
            #5

            Deleting a null pointer is a safe operation. There's no need to check for it.

            Asking a question about code? http://eel.is/iso-c++/testcase/

            1 Reply Last reply
            2
            • M MimCimm

              @JonB If I initialize with nullptr than I am losing old created object before delete it. But old thread still countinue to work when I check OS from linux terminal.

              sierdzioS Offline
              sierdzioS Offline
              sierdzio
              Moderators
              wrote on last edited by
              #6

              @MimCimm said in How to check pointer object isExist before?:

              @JonB If I initialize with nullptr than I am losing old created object before delete it. But old thread still countinue to work when I check OS from linux terminal.

              You definitely need to initialize with nullptr - in constructor or (IMO better) in the header:

              MyClass *myClassObject = nullptr;
              

              Otherwise it is very, very easy to crash your app.

              (Z(:^

              M 1 Reply Last reply
              1
              • M MimCimm

                @JonB If I initialize with nullptr than I am losing old created object before delete it. But old thread still countinue to work when I check OS from linux terminal.

                JonBJ Offline
                JonBJ Offline
                JonB
                wrote on last edited by
                #7

                @MimCimm said in How to check pointer object isExist before?:

                If I initialize with nullptr than I am losing old created object before delete it.

                That's not "initializing", that's just "overwriting", of course I was not suggesting that. Just make sure it's nullptr before you start, and reset it to nullptr any time you delete it (unless you immediately set it to something else). I still don't understand what your issue is.

                1 Reply Last reply
                0
                • sierdzioS sierdzio

                  A pointer is just an integer - if you make sure to set it to nullptr when it's not created, you can simply check with if:

                  if (myClassObject) {
                    delete myClassObject;
                    myClassObject = nullptr;
                  }
                  

                  Alternatively, you can use QPointer and it's isNull() method - if your MyClass is a subclass of QObject.

                  M Offline
                  M Offline
                  MimCimm
                  wrote on last edited by
                  #8

                  @sierdzio I tried with QPointer but also QPointer stops running if I try to set myObject into QPoiter object before new ;

                  QPointer<MyClassObject>qPointObject(myClassObject); //it throws error in this line
                  qDebug()<< qPointObject.isNull();
                  myClasssObject = new MyClassObject();
                  

                  I know It throws because I am trying to set before using new (that means create) but That is exactly thing ,I want to check.
                  If I control after new line I am losing the old thread.

                  sierdzioS 1 Reply Last reply
                  0
                  • B Offline
                    B Offline
                    Bonnie
                    wrote on last edited by
                    #9

                    ---x.h---
                    MyClass *myClassObject;

                    Is that a global pointer or a class member?
                    If it is a global pointer, it shouldn't be put in a header file...Otherwise you'll get problems when you include this header file in multiple other files...

                    1 Reply Last reply
                    0
                    • sierdzioS sierdzio

                      @MimCimm said in How to check pointer object isExist before?:

                      @JonB If I initialize with nullptr than I am losing old created object before delete it. But old thread still countinue to work when I check OS from linux terminal.

                      You definitely need to initialize with nullptr - in constructor or (IMO better) in the header:

                      MyClass *myClassObject = nullptr;
                      

                      Otherwise it is very, very easy to crash your app.

                      M Offline
                      M Offline
                      MimCimm
                      wrote on last edited by MimCimm
                      #10
                      This post is deleted!
                      1 Reply Last reply
                      0
                      • M MimCimm

                        @sierdzio I tried with QPointer but also QPointer stops running if I try to set myObject into QPoiter object before new ;

                        QPointer<MyClassObject>qPointObject(myClassObject); //it throws error in this line
                        qDebug()<< qPointObject.isNull();
                        myClasssObject = new MyClassObject();
                        

                        I know It throws because I am trying to set before using new (that means create) but That is exactly thing ,I want to check.
                        If I control after new line I am losing the old thread.

                        sierdzioS Offline
                        sierdzioS Offline
                        sierdzio
                        Moderators
                        wrote on last edited by
                        #11

                        @MimCimm said in How to check pointer object isExist before?:

                        @sierdzio I tried with QPointer but also QPointer stops running if I try to set myObject into QPoiter object before new ;

                        QPointer<MyClassObject>qPointObject(myClassObject); //it throws error in this line
                        qDebug()<< qPointObject.isNull();
                        myClasssObject = new MyClassObject();
                        

                        I know It throws because I am trying to set before using new (that means create) but That is exactly thing ,I want to check.
                        If I control after new line I am losing the old thread.

                        I meant to use it in your header:

                        QPointer<MyClass> myClassObject;
                        

                        (Z(:^

                        1 Reply Last reply
                        1

                        • Login

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • Users
                        • Groups
                        • Search
                        • Get Qt Extensions
                        • Unsolved