Técnicas de Inicialização
A inicialização uniforme, introduzida no C++11, utiliza chaves {} para uma inicialização consistente de objetos em diferentes tipos.
// Tipos primitivos
int x{42};
double pi{3.14159};
// Objetos de classe
class Person {
public:
Person(std::string n, int a) : name(n), age(a) {}
private:
std::string name;
int age;
};
Person student{"Alice", 20};
Inicialização de Lista
A inicialização de lista permite inicializar contêineres e objetos complexos com facilidade.
// Inicialização de vetor
std::vector<int> numbers{1, 2, 3, 4, 5};
// Inicialização de lista aninhada
std::vector<std::vector<int>> matrix{{1, 2}, {3, 4}, {5, 6}};
Inicialização de Construtor
Diferentes Técnicas de Inicialização de Construtor
graph TD
A[Construção de Objeto] --> B[Construtor Padrão]
A --> C[Construtor Parametrizado]
A --> D[Construtor de Cópia]
A --> E[Construtor de Mova]
Exemplo de Inicialização de Construtor
class Rectangle {
public:
// Construtor padrão
Rectangle() : width(0), height(0) {}
// Construtor parametrizado
Rectangle(int w, int h) : width(w), height(h) {}
// Construtor de cópia
Rectangle(const Rectangle& other) :
width(other.width), height(other.height) {}
private:
int width;
int height;
};
Inicialização de Ponteiros Inteligentes
Ponteiros inteligentes fornecem gerenciamento de memória seguro e automático.
// Inicialização de ponteiro único
std::unique_ptr<int> uniqueNum = std::make_unique<int>(100);
// Inicialização de ponteiro compartilhado
std::shared_ptr<std::string> sharedText = std::make_shared<std::string>("LabEx");
Comparação dos Métodos de Inicialização
| Tipo de Inicialização |
Sintaxe |
Caso de Uso |
Desempenho |
| Inicialização Uniforme |
Type{value} |
Universal, seguro para tipos |
Eficiente |
| Inicialização de Lista |
{val1, val2, ...} |
Contêineres, objetos complexos |
Flexível |
| Construtor |
Type(params) |
Criação de objetos personalizados |
Personalizável |
| Ponteiros Inteligentes |
std::make_unique/shared |
Gerenciamento de memória dinâmica |
Seguro |
Técnicas de Inicialização Avançadas
Inicializadores de Membros na Classe
class Configuration {
int port{8080}; // Valor padrão
std::string host{"localhost"}; // Inicialização em tempo de compilação
};
Boas Práticas
- Prefira a inicialização uniforme para segurança de tipos.
- Utilize a inicialização de lista para contêineres.
- Utilize a inicialização de construtor para objetos complexos.
- Utilize ponteiros inteligentes para gerenciamento de memória dinâmica.
Dominando essas técnicas de inicialização, os desenvolvedores podem escrever código C++ mais robusto e eficiente, uma habilidade altamente valorizada no ecossistema de programação LabEx.