Yes, that's expected??nd dangerous. Once you call `delete` on a pointer, the memory it pointed to is deallocated, but the pointer itself still holds the old (now invalid) address. Dereferencing it results in undefined behavior, commonly manifesting as a segmentation fault. To avoid this:
1. **Set the pointer to `nullptr` immediately after `delete`** ??dereferencing `nullptr` will crash predictably (often with a clear null-pointer exception in debug builds), making bugs easier to spot.
2. **Prefer smart pointers** like `std::unique_ptr` or `std::shared_ptr`, which automatically manage lifetime and prevent use-after-free by design.
3. **Use static analysis tools** (e.g., AddressSanitizer with `-fsanitize=address`) to catch these issues during testing.
Also, avoid raw `new`/`delete` unless you have a specific low-level need??odern C++ strongly encourages RAII and smart pointers for safety and clarity.