Какие преимущества мы получаем, инициализируя члены при запуске конструктора в C ++? [Дубликат]

0

Вот пример.

#include <iostream>


class my_strcmp
{

private:

char *m_src;
char *m_dest;

public:
my_strcmp(char *a, char *b);
int strcmp();

};

/** Initializer list in constructor **/
my_strcmp::my_strcmp(char *a, char *b) : m_src(a), m_dest(b)
{

  //std::cout<<"Constructor called"<<std::endl;

}

int my_strcmp::strcmp()
{
   while( (*src++ == *dest++) && ( *src != '\0') )
   {

   }

   if( (*src=='\0') && (*dest == '\0') )
   {
       //std::cout<<"Data matches"<<std::endl;
       return 0;

   }        

   else
   {

     return -1;   
   }


}


int main(int argc, char *argv[])
{
    if( argc > 2 )
    {

        my_strcmp example(argv[1],argv[2]);
        std::cout<< (example.strcmp()?"Un-Match":"Match");
        std::cout<<std::endl;
    }

    else
    {
      std::cout<<"Pass right arguments" << std::endl;   

    }

    return 0;

}

Что я получу по следующему?

/** Initializer list in constructor **/
my_strcmp::my_strcmp(char *a, char *b) : m_src(a), m_dest(b)
{

  //std::cout<<"Constructor called"<<std::endl;

}

и почему бы не начать инициализацию в теле? в чем заключается выигрыш?

Теги:

1 ответ

0

В простом примере, подобном этому, вы мало выигрываете. Но если m_src или m_dest были более крупными, более сложными объектами (у которых был свой собственный конструктор по умолчанию), тогда может получиться больше, потому что объекты сначала будут построены по умолчанию, а затем назначены (вид траты на весь построенный по умолчанию) работа, которая была выполнена).

Кроме того, некоторые типы не имеют конструкторов по умолчанию, поэтому они не могут быть построены по умолчанию и назначены в теле конструктора и должны быть инициализированы в списке инициализаторов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню