C/Visual C - sobrecarga de new y delete

 
Vista:

sobrecarga de new y delete

Publicado por Oliver Ramirez (12 intervenciones) el 09/07/2002 01:27:25
como sobrecargo a new y delete para la siguiente clase, de manera que la pueda instanciar completamente en memoria.?

/*
Clase para definir objetos matrices y ejecutar todas las
operaciones matemàticas que se les puede realizar. Escrito por
Oliver Ramirez [email protected] 20/06/02
*/
#include <iostream.h>
class matriz
{
public:
matriz(const int,const int);
~matriz();
void vTraspuesta();
void vInversa();
void vMostrar();
double dDeterminante()const;
double dObtenerValor(const int,const int);
void vFijarValor(double,int,int);
// void* operator new(unsigned int tamano);
// void* operator new(unsigned int tamano,int,int);

protected:
unsigned short usSegmento;
double* pMatriz_Dinamica;
int iFila;
int iColubna;
};

Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Sobrecarga de operadores `new` y `delete` en la clase `matriz`**

Publicado por Alejandro (913 intervenciones) el 06/03/2025 18:16:13
Para sobrecargar los operadores `new` y `delete` en la clase `matriz`, puedes definir tus propias versiones de estos operadores dentro de la clase. Esto te permitirá gestionar la memoria de manera personalizada y asegurarte de que la matriz se instancie completamente en memoria. A continuación, te muestro cómo hacerlo:

Implementación de la sobrecarga de `new` y `delete`



Aquí tienes el código modificado de la clase `matriz` con la sobrecarga de los operadores `new` y `delete`:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <iostream>
#include <cstdlib> // Para std::malloc y std::free
 
class matriz {
public:
    matriz(const int filas, const int columnas);
    ~matriz();
 
    void vTraspuesta();
    void vInversa();
    void vMostrar();
    double dDeterminante() const;
    double dObtenerValor(const int fila, const int columna);
    void vFijarValor(double valor, int fila, int columna);
 
    // Sobrecarga de new y delete
    void* operator new(size_t size);
    void operator delete(void* pointer);
 
protected:
    unsigned short usSegmento;
    double* pMatriz_Dinamica;
    int iFila;
    int iColumna;
};
 
// Implementación del constructor
matriz::matriz(const int filas, const int columnas) : iFila(filas), iColumna(columnas) {
    pMatriz_Dinamica = new double[filas * columnas]; // Asignar memoria para la matriz
}
 
// Implementación del destructor
matriz::~matriz() {
    delete[] pMatriz_Dinamica; // Liberar la memoria asignada
}
 
// Sobrecarga del operador new
void* matriz::operator new(size_t size) {
    void* p = std::malloc(size); // Usar malloc para asignar memoria
    if (!p) {
        throw std::bad_alloc(); // Lanzar excepción si no se puede asignar memoria
    }
    return p;
}
 
// Sobrecarga del operador delete
void matriz::operator delete(void* pointer) {
    std::free(pointer); // Usar free para liberar memoria
}
 
// Implementación de otros métodos (vTraspuesta, vInversa, etc.) aquí...
 
// Ejemplo de uso
int main() {
    matriz* m = new matriz(3, 3); // Crear una matriz de 3x3
    // Realizar operaciones con la matriz...
    delete m; // Liberar la memoria
    return 0;
}

Explicación del código



1. Constructor y destructor:
- El constructor `matriz` asigna memoria para la matriz dinámica utilizando `new[]`.
- El destructor libera la memoria utilizando `delete[]`.

2. Sobrecarga de `new`:
- La sobrecarga del operador `new` utiliza `std::malloc` para asignar memoria. Si la asignación falla, se lanza una excepción `std::bad_alloc`.

3. Sobrecarga de `delete`:
- La sobrecarga del operador `delete` utiliza `std::free` para liberar la memoria asignada.

Notas adicionales


- Asegúrate de incluir las cabeceras necesarias (`<cstdlib>` para `malloc` y `free`).
- Puedes implementar los métodos restantes de la clase según sea necesario.
- Este enfoque permite que la clase `matriz` gestione su propia memoria de manera eficiente y segura.

¡Espero que esto te sea útil, Oliver!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar