Так не получается. После того, как вы сдвинули назад свой k2, который указывает на некоторую память, которую вы выделили, вы сохранили ее в векторе. Таким образом, у вас есть указатель, указывающий на область памяти, которая имеет 10 в нем. После присвоения k3 k2, вы только изменили переменную-указатель, чтобы указывать на другую ячейку памяти, в которой есть 100. После этого вы даже не удалите k2, вы потеряли указатель на эту память. Это называется утечкой памяти.
Вы можете изменить указатель, который вы сохранили в своем векторе. Таким образом, у вас все еще есть доступ к вашим старым данным. Я также не рекомендую перезаписывать этот указатель. Вы не получите доступ к памяти, которую вы выделили для своих данных.
struct Node
{
Node()
{
visited_print = false;
visited_find = false;
}
bool visited_print;
bool visited_find;
int value;
std::vector<Node*> children;
Node *parent;
};
int main(){
Node *k1 = new Node();
Node *k2 = new Node();
k2->value = 10;
Node *k3 = new Node();
k3->value = 100;
k1->children.push_back(k2);
//k2 = k3;
delete k2;
k1->children[0] = k3;
}
Вы могли сделать many-many отношения между POST и КАТЕГОРИЕЙ и POST и ТЕМОЙ:
POST
----
ID
Text ...
...
CATEGORY
--------
ID
Name
TOPIC
-----
ID
Name
POST_CATEGORY
-------------
POST_ID (FK)
CATEGORY_ID (FK)
POST_TOPIC
----------
POST_ID (FK)
TOPIC_ID (FK)
Таким образом, сообщение может быть связано с любым количеством категорий и тем.
Вы на правильном пути с nullable полями POST_CATEGORY_ID и POST_TOPIC_ID. Это смоделирует это сообщение дополнительно быть связанным с категорией и дополнительно связанным с темой.
Если это будет предназначено, чтобы быть эксклюзивным и обязательным, то необходимо будет добавить проверочное ограничение, что любой является пустым, но не оба.
Я думаю, что объявление внешнего ключа может только относиться к единственной таблице:
FOREIGN KEY(CATEGORY_ID) REFERENCES CATEGORY(CATEGORY_ID);
FOREIGN KEY(TOPIC_ID) REFERENCES TOPIC(TOPIC_ID);
Если я корректен, у Вас должно будет быть два внешних ключа, один для таблицы CATEGORY и другого для ТЕМЫ и обеих потребностей быть nullable.
Как насчет того, чтобы иметь категории и темы в той же таблице
составьте таблицу topics_categories (идентификационный номер, описание varchar2 (100), item_type символ (1)); - C или T
Затем единственный внешний ключ к topics_categories
Лучший способ состоит в том, чтобы использовать Наследование. У Вас будет две специализации "Posts": "Posts_Category" и "Posts_Topic" Оба имеют "post_id" (который касается родительской таблицы "Сообщения"), и другое поле:
"Category_ID" ("Posts_Category")
"Topic_ID" ("Posts_Topic")
Если это звучит, путают взгляд на Доктрину (PHP ORM) в их документации: http://www.doctrine-project.org/documentation/manual/1_0/en/inheritance
Если Вы хотите определить внешние ключи в базе данных, решение, что Вы предлагаете право звуков. Я также предлагаю писать некоторый код в триггере, чтобы удостовериться, что оба поля не являются пустыми.