The second point is imho the single most important thing to know. Even if you have
foo* new_foo() { return (foo*)malloc(sizeof(foo)); }
or something like that, you should always have `new_foo` and `delete_foo` otherwise you will leak memory and you will have use after free.