Прежде всего, я прошу прощения за этот вопрос. Я рассмотрел большинство основных ответов, связанных с delete
и new
в C++, но я по-прежнему не могу исправить свои проблемы здесь. Здесь у меня есть 3 класса следующим образом:Правильное использование delete в C++
class bucket
{
// Some stl container here where data would be inserted
// Some methods and fields here
// This class has no new keyword
};
class TrieNode
{
public:
bucket *pointer;
TrieNode() //Constructor for this class
{
pointer = NULL;
};
TrieNode(int local) //Parametrized Constructor for this class
{
pointer = new bucket(local); //Here is the new keyword
}
};
class Hashtable
{
private:
int globalDepth;
std::vector<TrieNode> table; //Vector of other class
void Split(int index)
{
// Here I am creating instances of other class(TrieNode) which has pointer
TrieNode first(capacity);
TrieNode second(capacity);
// Then after some processing I have to do this
table[index] = first; //Assignment which will be using new keyword in it's class i.e. first
table[mirrorIndex] = second; //again assignment
}
public:
Hashtable(int globalDepth) //Constructor for this class
{
std::cout<<"Table is being created...\n";
this->globalDepth = globalDepth;
table.resize(pow(2,globalDepth),TrieNode()); //vector of class here
}
};
int main(int argc, char const *argv[])
{
bool input = true;
Hashtable mytable(1); //Instance of Third class
}
Теперь моя проблема, когда я использую деструктор в классе
TrieNode
сdelete pointer
он показывает мне Сегментация ошибку, как только я пытаюсь вставить что-то в векторе класса С потому что destructor вызывается автоматически после создания и удаляет вектор [right?], и когда я используюdelete
в деструкторе класса C какdelete table[i].pointer
, тогда я также получаю ошибку [core dumped]. Итак, как я должен использоватьdelete
в этих случаях. Случаи, когда я использовал назначение экземпляра класса (с новым) внутри некоторых функций, например. в функции Split выше в классе C Или мне нужно изменить общий стиль здесь?
Научитесь использовать gdb и читайте о std :: unique_ptr и создайте копии (что они на самом деле копируют) – James
@James Конечно. Благодаря! –