Config = LoadConfig("config.cfg");
assert(Config != NULL);
Config->GetValue(...)Вот в таком случае явно не место assert-у. Как минимум -
throw std::exception("wtf w/config?")
Config = LoadConfig("config.cfg");
assert(Config != NULL);
Config->GetValue(...)throw std::exception("wtf w/config?")
template <typename T>
class Vector { ... }
template <typename T>
class Deque { ... }
template <template <typename> class Container>
class SomeClass
{
Container<SomeDataType> Data;
}
SomeClass<Vector> VectorObject;
SomeClass<Deque> DequeObject;
delete this; выглядит довольно необычно. Выглядит, как будто мы рубим сук, на котором сидим. Однако, все довольно безопасно, если выполнять меры предосторожности (мыть руки перед едой ;)).this.void vector::remove(ItT it)void ::remove(vector* this, ItT it)int vector::size() constint ::size(const vector* this).this или как-то по-другому - это все равно. Главное, не пользоваться этим объектом после удаления. Причем (внимание!) нужно перестать им пользоваться совсем, то есть не только в этом методе после выполнения delete this;, но и там, откуда этот метод вызван.delete this; естественно надо убедиться, что объект создан через new, а не на стеке или еще как-то (каким-нибудь нестандартным аллокатором). Как убедиться в этом - вопрос дизайна (design). Можно просто написать в документации: "этот объект нужно создавать через new" или сделать конструкторы приватными и создат static-member-ов для создания объектов. Или вообще использовать boost:shared_ptr, и тогда вместо delete this; будет sp.release(), который удалит объект как ему предписывает назначенный deleter.