Atribuir dinamicamente um Array em C++
-
Utilizar o
new()
Operador para Alocar Dinamicamente um Array em C++ -
Utilizar o método
std::unique_ptr
para Atribuir Dinamicamente o Array em C++ -
Utilize
std::make_unique()
Método para Alocar Dinamicamente o Array em C++
Este artigo demonstra múltiplos métodos sobre como alocar dinamicamente um array em C++.
Utilizar o new()
Operador para Alocar Dinamicamente um Array em C++
O operador new
atribui dinamicamente o objecto na memória do heap
e devolve um ponteiro ao local. Neste programa de exemplo, declaramos a matriz de caracteres constante e o tamanho como uma variável de int
. Em seguida, alocamos dinamicamente a matriz de caracteres e atribuímos os valores correspondentes aos seus elementos no corpo do laço for
.
Note-se que o operador delete
deve ser explicitamente chamado assim que a memória associada ao ponteiro arr
já não seja necessária. Os parênteses especificados após o operador delete
dizem ao compilador que o ponteiro se refere ao primeiro elemento de um array. Se os parênteses forem omitidos ao apagar um ponteiro para um array, o comportamento é indefinido.
#include <iostream>
using std::cout;
using std::endl;
constexpr int SIZE = 10;
static const char chars[] = {'B', 'a', 'd', 'C', 'T', 'L', 'A', 'R', 'e', 'I'};
int main() {
char *arr = new char[SIZE];
for (int i = 0; i < SIZE; ++i) {
arr[i] = chars[i];
cout << arr[i] << "; ";
}
cout << endl;
delete[] arr;
return EXIT_SUCCESS;
}
Resultado:
B; a; d; C; T; L; A; R; e; I;
Utilizar o método std::unique_ptr
para Atribuir Dinamicamente o Array em C++
Outra forma de atribuir um array dinâmica é utilizar o std::unique_ptr
smart pointer, que fornece uma interface de gestão de memória mais segura. Diz-se que a função unique_ptr
é propriedade do objecto que aponta; em troca, o objecto é destruído assim que o ponteiro sai do âmbito. Ao contrário dos apontadores regulares, o ponteiro inteligente não precisa que o operador delete
seja chamado por um programador; em vez disso, é chamado implicitamente quando o objecto é destruído.
#include <iostream>
#include <memory>
using std::cout;
using std::endl;
constexpr int SIZE = 10;
static const char chars[] = {'B', 'a', 'd', 'C', 'T', 'L', 'A', 'R', 'e', 'I'};
int main() {
std::unique_ptr<char[]> arr(new char[SIZE]);
for (int i = 0; i < SIZE; ++i) {
arr[i] = chars[i];
cout << arr[i] << "; ";
}
cout << endl;
return EXIT_SUCCESS;
}
Resultado:
B; a; d; C; T; L; A; R; e; I;
Utilize std::make_unique()
Método para Alocar Dinamicamente o Array em C++
A função make_unique
é uma alternativa mais contemporânea para lidar com a gestão dinâmica da memória. Este método aloca dinamicamente um objecto de um determinado tipo e devolve o std::unique_ptr
smart pointer. O tipo do objecto é especificado como o parâmetro do modelo. Por outro lado, o array char
de tamanho fixo é atribuído e atribuído à variável de tipo auto
no exemplo seguinte:
#include <iostream>
#include <memory>
using std::cout;
using std::endl;
constexpr int SIZE = 10;
static const char chars[] = {'B', 'a', 'd', 'C', 'T', 'L', 'A', 'R', 'e', 'I'};
int main() {
auto arr = std::make_unique<char[]>(SIZE);
for (int i = 0; i < SIZE; ++i) {
arr[i] = chars[i];
cout << arr[i] << "; ";
}
cout << endl;
return EXIT_SUCCESS;
}
Resultado:
B; a; d; C; T; L; A; R; e; I;
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook