скажем, я создал собственный класс Array и имею следующий конструктор:
Array::Array(size_t size)
{
mySize = size;
//myData is of type int*
myData = new int[mySize]; // this stuff is allocated on a heap
}
Насколько мне известно, конструктор копирования по умолчанию в этом случае будет реализован следующим образом:
Array::Array(Array& a)
{
mySize = a.mySize;
myData = a.myData; //points to the same memory on the heap
}
Наконец, скажем, у меня есть следующий код в моем файле main.cpp
int main()
{
Array a(1);
Array b(a); //copy constructor is invoked
}
То, что я ожидал, было утечкой памяти из-за удаления указателей myData на свободную память хранилища, НО у меня есть следующая ошибка времени выполнения:
*** glibc detected *** ./main.out: double free or corruption (fasttop): 0x086ad008 ***
ПОЧЕМУ? Кажется, что ~Array() каким-то образом автоматически освобождает память, выделенную в куче, но мне это очень нелогично. Может быть, я что-то упускаю?
ОБНОВИТЬ:
class Array{
private:
size_t mySize;
int *myData;
...
ОБНОВЛЕНИЕ 2:
основной.cpp:
#include <iostream>
#include "array.h"
int main()
{
Array a(1);
Array b(a);
}
массив.ч:
#ifndef ARRAY_H_
#define ARRAY_H_
#include <stddef.h>
class Array{
private:
size_t mySize;
int *myData;
public:
Array(size_t size);
~Array();
void set(int i,int val);
int get(int i);
size_t getSize();
};
#endif
массив.cpp:
#include "array.h"
Array::Array(size_t size)
{
mySize = size;
myData = new int[mySize];
}
Array::~Array()
{
delete[] myData;
}
void Array::set(int i, int val)
{
if(i>=0 && i<mySize)
myData[i] = val;
}
int Array::get(int i)
{
if(i>=0 && i<mySize)
return myData[i];
else return -1;
}
size_t Array::getSize()
{
return mySize;
}
delete
? Является лиArray
подклассом? - person D.Shawley   schedule 07.03.2013