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. Mainwindow closes when I close PCL window.
Forum Updated to NodeBB v4.3 + New Features

Mainwindow closes when I close PCL window.

Scheduled Pinned Locked Moved Unsolved General and Desktop
pcl
29 Posts 4 Posters 5.1k Views 1 Watching
  • 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.
  • S surajj4837

    @jsulm That was the original problem I started with. The following statement was not there earlier

    viewer.~CloudViewer();
    

    But when I clicked on close button of viewer the cloudviewer window still existed on screen, so I tried closing through code. But that raised the error.

    jsulmJ Offline
    jsulmJ Offline
    jsulm
    Lifetime Qt Champion
    wrote on last edited by
    #14

    @surajj4837 said in Mainwindow closes when I close PCL window.:

    But when I clicked on close button of viewer the cloudviewer window still existed on screen

    Then debug your code instead of doing strange things like deleting stack allocated objecs. Probably you're hanging in while (!viewer.wasStopped ()) loop.

    https://forum.qt.io/topic/113070/qt-code-of-conduct

    1 Reply Last reply
    1
    • S surajj4837

      @JonB

      This viewer declaration is in line #55:

      pcl::visualization::CloudViewer viewer("Cloud Viewer");
      

      When destructor is called the execution jumps to that line.

      jsulmJ Offline
      jsulmJ Offline
      jsulm
      Lifetime Qt Champion
      wrote on last edited by
      #15

      @surajj4837 Also, does pcl::visualization::CloudViewer allocate the actual dialog on the heap?

      https://forum.qt.io/topic/113070/qt-code-of-conduct

      S 1 Reply Last reply
      0
      • S surajj4837

        @JonB

        This viewer declaration is in line #55:

        pcl::visualization::CloudViewer viewer("Cloud Viewer");
        

        When destructor is called the execution jumps to that line.

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

        @surajj4837
        For one thing, because of your

        pcl::visualization::CloudViewer viewer("Cloud Viewer");
        

        local variable this will be automatically destructed on reaching the end of function's } scope. You shouldn't call the destructor explicitly, even if that was OK I imagine it would cause double-destruction on exiting the method....

        S 1 Reply Last reply
        1
        • jsulmJ jsulm

          @surajj4837 Also, does pcl::visualization::CloudViewer allocate the actual dialog on the heap?

          S Offline
          S Offline
          surajj4837
          wrote on last edited by
          #17

          @jsulm The CloudViewer constructor definition says it creates the object on heap.

          jsulmJ 1 Reply Last reply
          0
          • JonBJ JonB

            @surajj4837
            For one thing, because of your

            pcl::visualization::CloudViewer viewer("Cloud Viewer");
            

            local variable this will be automatically destructed on reaching the end of function's } scope. You shouldn't call the destructor explicitly, even if that was OK I imagine it would cause double-destruction on exiting the method....

            S Offline
            S Offline
            surajj4837
            wrote on last edited by
            #18

            @JonB https://www.geeksforgeeks.org/possible-call-constructor-destructor-explicitly/

            Christian EhrlicherC JonBJ 2 Replies Last reply
            0
            • S surajj4837

              @JonB https://www.geeksforgeeks.org/possible-call-constructor-destructor-explicitly/

              Christian EhrlicherC Offline
              Christian EhrlicherC Offline
              Christian Ehrlicher
              Lifetime Qt Champion
              wrote on last edited by Christian Ehrlicher
              #19

              @surajj4837 You must not call a dtor for an object when you created it on the stack as you did - no matter if you call it in an unusual way like you did or with the correct c++ way by calling delete. C++ basics.

              Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
              Visit the Qt Academy at https://academy.qt.io/catalog

              S 1 Reply Last reply
              1
              • S surajj4837

                @JonB https://www.geeksforgeeks.org/possible-call-constructor-destructor-explicitly/

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

                @surajj4837

                @JonB https://www.geeksforgeeks.org/possible-call-constructor-destructor-explicitly/

                Explicit call to destructor is only necessary when object is placed at particular location in memory by using placement new.

                Do you have any evidence this is the case for you?

                S 1 Reply Last reply
                0
                • S surajj4837

                  @jsulm The CloudViewer constructor definition says it creates the object on heap.

                  jsulmJ Offline
                  jsulmJ Offline
                  jsulm
                  Lifetime Qt Champion
                  wrote on last edited by
                  #21

                  @surajj4837 said in Mainwindow closes when I close PCL window.:

                  The CloudViewer constructor definition says it creates the object on heap

                  Please show its code. viewer itself is allocated on the stack as you can clearly see from your code...

                  https://forum.qt.io/topic/113070/qt-code-of-conduct

                  S 1 Reply Last reply
                  0
                  • Christian EhrlicherC Christian Ehrlicher

                    @surajj4837 You must not call a dtor for an object when you created it on the stack as you did - no matter if you call it in an unusual way like you did or with the correct c++ way by calling delete. C++ basics.

                    S Offline
                    S Offline
                    surajj4837
                    wrote on last edited by
                    #22

                    @Christian-Ehrlicher Okay

                    1 Reply Last reply
                    0
                    • JonBJ JonB

                      @surajj4837

                      @JonB https://www.geeksforgeeks.org/possible-call-constructor-destructor-explicitly/

                      Explicit call to destructor is only necessary when object is placed at particular location in memory by using placement new.

                      Do you have any evidence this is the case for you?

                      S Offline
                      S Offline
                      surajj4837
                      wrote on last edited by
                      #23

                      @JonB No.

                      1 Reply Last reply
                      0
                      • jsulmJ jsulm

                        @surajj4837 said in Mainwindow closes when I close PCL window.:

                        The CloudViewer constructor definition says it creates the object on heap

                        Please show its code. viewer itself is allocated on the stack as you can clearly see from your code...

                        S Offline
                        S Offline
                        surajj4837
                        wrote on last edited by
                        #24

                        @jsulm Official source code. Line #266.

                        jsulmJ Christian EhrlicherC 4 Replies Last reply
                        0
                        • S surajj4837

                          @jsulm Official source code. Line #266.

                          jsulmJ Offline
                          jsulmJ Offline
                          jsulm
                          Lifetime Qt Champion
                          wrote on last edited by
                          #25

                          @surajj4837 said in Mainwindow closes when I close PCL window.:

                          Line #266.

                          What is in that line?

                          https://forum.qt.io/topic/113070/qt-code-of-conduct

                          1 Reply Last reply
                          0
                          • S surajj4837

                            @jsulm Official source code. Line #266.

                            Christian EhrlicherC Offline
                            Christian EhrlicherC Offline
                            Christian Ehrlicher
                            Lifetime Qt Champion
                            wrote on last edited by
                            #26

                            @surajj4837 said in Mainwindow closes when I close PCL window.:

                            @jsulm Official source code. Line #266.

                            There the object itself creates a new object on the heap. Don't know what this should have to do with your object which you create on the stack though.

                            Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                            Visit the Qt Academy at https://academy.qt.io/catalog

                            1 Reply Last reply
                            0
                            • S surajj4837

                              @jsulm Official source code. Line #266.

                              jsulmJ Offline
                              jsulmJ Offline
                              jsulm
                              Lifetime Qt Champion
                              wrote on last edited by jsulm
                              #27

                              @surajj4837 This does not change anything! viewer is allocated on the stack. Its constructor allocates something on the heap but that is deleted in the destructor. But you do not have to call destructor for objects allocated on the stack as it is called when the object is destroyed (if it leaves its scope). I suggest you learn C++ basics (memory management).

                              https://forum.qt.io/topic/113070/qt-code-of-conduct

                              S 1 Reply Last reply
                              1
                              • S surajj4837

                                @jsulm Official source code. Line #266.

                                jsulmJ Offline
                                jsulmJ Offline
                                jsulm
                                Lifetime Qt Champion
                                wrote on last edited by
                                #28

                                @surajj4837 Actually there seems to be a bug:

                                00270 pcl::visualization::CloudViewer::~CloudViewer ()
                                00271 {
                                00272   impl_->quit_ = true;
                                00273   impl_->viewer_thread_.join();
                                00274 }
                                00275 
                                

                                Destructor does not delete impl!
                                It should be

                                pcl::visualization::CloudViewer::~CloudViewer ()
                                {
                                   impl_->quit_ = true;
                                   impl_->viewer_thread_.join();
                                   delete impl;
                                }
                                

                                https://forum.qt.io/topic/113070/qt-code-of-conduct

                                1 Reply Last reply
                                0
                                • jsulmJ jsulm

                                  @surajj4837 This does not change anything! viewer is allocated on the stack. Its constructor allocates something on the heap but that is deleted in the destructor. But you do not have to call destructor for objects allocated on the stack as it is called when the object is destroyed (if it leaves its scope). I suggest you learn C++ basics (memory management).

                                  S Offline
                                  S Offline
                                  surajj4837
                                  wrote on last edited by
                                  #29

                                  @jsulm Sure, I will do that.

                                  1 Reply Last reply
                                  0

                                  • Login

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