работа универсальной инициализации, заставляющая деструктор вызываться еще раз


        #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;
         }

выход:

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

мой вопрос в том, почему деструктор вызывается на один дополнительный раз или создается дополнительный объект по сравнению с другой инициализацией, когда инициализация выполняется с использованием универсальной инициализации


person shreyansh    schedule 26.09.2020    source источник
comment
Я предполагаю, что v{t1} нужно настроить список инициализаторов и скопировать туда t1; а затем конструктор вектора копирует из списка инициализаторов. Эта форма вызывает vector(std::initializer_list<T>) перегрузку конструктора вектора.   -  person Igor Tandetnik    schedule 26.09.2020