Ваша проблема здесь:
Test tObj = Test();
Test()
создает временный объект Test
, который затем копируется в tObj
. На этом этапе и tObj
, и временный объект имеют big
для указания на массив. Затем временный объект уничтожается, что вызывает деструктор и уничтожает массив. Поэтому, когда tObj
уничтожается, он пытается снова уничтожить уже уничтоженный массив.
Далее, когда tVec
уничтожен, он уничтожит свои элементы, поэтому уже уничтоженный массив будет уничтожен еще раз.
Вы должны определить конструктор копирования и оператор присваивания, чтобы при копировании объекта Test
массив big
копировался или имел какой-то счетчик ссылок, чтобы он не уничтожался до тех пор, пока все владельцы не будут уничтожены. уничтожены.
Простое решение - определить класс следующим образом:
class Test
{
private:
std::vector<int> big;
public:
Test (): big(10000) {}
};
В этом случае вам не нужно определять какой-либо деструктор, конструктор копирования или оператор присваивания, потому что член std::vector<>
позаботится обо всем. (Но учтите, что это означает, что при копировании экземпляра Test
. Выделяется и копируется 10 000 байт.)