1

        #include<iostream>
        #include<vector>

        class test {
            public:
                  virtual ~test() 
                  {
                      std::cout<<"inside destructor \n";
                  }
    
        };
    


        int main()
        {
            std::cout<<"---with universal initializer--------- \n";
            {
             test t1;
             std::vector<test> v{t1};
            }
            std::cout<<"----- ending universal initailizer ----- \n";
    
            std::cout<<"------------------------\n ";
            test t2;
            std::vector<test> v2(1,t2);
    

            return 0;
         }

output:

---with universal initializer---------                                                                                                          
inside destructor                                                                                                                               
inside destructor                                                                                                                               
inside destructor                                                                                                                               
----- ending universal initailizer -----                                                                                                        
------------------------                                                                                                                        
 inside destructor                                                                                                                              
inside destructor

my question is why destructor is called one extra time or extra object is created compared to other initialization when initialization done using universal initialization

cigien
  • 57,834
  • 11
  • 73
  • 112
shreyansh
  • 11
  • 2
  • My guess is, `v{t1}` needs to set up an initializer list and copy `t1` there; and then the vector's constructor copies from the initializer list. This form is calling `vector(std::initializer_list)` overload of the vector's constructor. – Igor Tandetnik Sep 26 '20 at 18:49

0 Answers0