Тазом чувствую, что что-то неправильно, а что -- понять не могу:
void __fastcall MergeDataSets(TOAClientDataSet* cdsDst, TOAClientDataSet* cdsSrc, std::vector<const char*>& KeyFieldNames, std::vector<const char*>& CopyFieldNames)
{
//собираю ключи, которые уже есть в датасете назначения
std::set<std::vector<AnsiString> > existing_keys;
for (cdsDst->First(); !cdsDst->Eof; cdsDst->Next())
existing_keys.insert(CreateKeyVector(cdsDst, KeyFieldNames)); //функцию смотри ниже
for (cdsSrc->First(); !cdsSrc->Eof; cdsSrc->Next())
{
//проверяю, что ключ из второго датасета не встречается в первом
std::vector
if (existing_keys.find(key) == existing_keys.end())
{
//копирую из второго в первый
//...
existing_keys.insert(key);
}
}
while (!existing_keys.empty())
{
//как бы, наверно, надо зачистить память, да?
existing_keys.begin()->clear();
existing_keys.erase(existing_keys.begin());
}
}
Ключ -- это вектор, строящийся из строчных представлений значений полей, имена которых перечислены в векторе KeyFieldNames, порядок, естественно, важен.
std::vector
{
unsigned key_length = KeyFieldNames.size();
std::vector<AnsiString> key;
for (unsigned i = 0; i < key_length; i++)
key.push_back(cds->FieldByName(KeyFieldNames[i])->AsString);
return key;
}
И вот подсказывает мне мой таз, что то ли память не зачищается где-то, то ли наоборот, объект удалится раньше, чем ссылки перестанут быть нужны.
no subject
#include
using namespace std;
template
void f(T& obj) {
obj.f();
}
class A {
public:
virtual void f() = 0;
};
class B : public A {
public:
virtual void f() { cerr << "B\n"; }
};
void g(A& obj) {
f(obj);
}
int main() {
A* b = new B;
g(*b);
}
4. мстительно слежу за тем, как отписавшиеся от меня окружающие переживают из-за сокращения собственных френд-оф списков.
no subject
4. Никогда не понимал, почему внимание или невнимание его мыслям должно расцениваться человеком как знак поощрения или наоборот... Мысли замерзли с утра, не получается.
no subject
Скорее всего, ты попытался хранить абстрактный класс "by value", а это -- грех.
4. Так как любой активный ЖЖ пишется для читателей, расширение аудитории показывает писателю, что его старания не пропадают даром. Соответственно, уменьшение аудитории действует в обратную сторону, утверждая что писанина -- скучная и никому не интересная.
no subject
no subject
Чего тогда не пишешь в ноутпад, сохраняя в трипл-дес на флеш-карте, оснащенной биометрической защитой?
no subject
Мне честно нет никакого дела до того, двести человек меня читают или двадцать. Числа приобретают значение, когда сопрягаются с другими числами: скажем, когда нужно повысить шансы найти какую-нибудь хрень по людям, получить совет или помощь. В этом смысле в фидо было лучше: были целевые эхи с толпой народа, и были общательные, где толпа не имела значения.