I think pointers are important because they give you an insight into what's really happening behind the scenes that you wouldn't otherwise get, but yeah - defer them a little, perhaps.
I want to talk a bit about pointers...
Assuming you wait long enough, most of the C++ threads on this site end up linking to my quizes (you've waited long enough). There's a reason for that: Most people who attempt my tests (without cheating) FAIL them. Even the easiest one, which is the first one.
When you speak of pointers as a magical thing that gets you down to the hardware, you're wrong. The fact of the matter is that in a modern application on almost any non-embedded platform A POINTER points "somewhere," not to memory. The fact of the matter is that in this day and age your program could be run on an emulated system, a virtual machine, across a network, from a TAPE DRIVE. A pointer could point to any of those devices and YOU, the programmer, would never know. A pointer could point to disk storage via memory-mapped files (mapping address space to file space), or to a network device, or even to memory on the GPU. The fact of the matter is, a POINTER, even in a pure assembly language program, is really just "something".
Now, you hear a lot of talk about how powerful pointers are. What people are really talking about are things like this:
int offset = (int)(T*)1 - (int)(MyType*)(T*)1;
aThing = (T*)((int)this + offset);
You hear people talking about how they "went hardcore C++ and pointer-ed dat shit up, yo." That's not being hardcore, that's not even being smart. That's flat out WRONG code, and is the EXACT REASON people should avoid pointers except when absolutely necessary.
Then you start getting into the more interesting foibles of C++... such as array to pointer decay. An example of this is the following code:
int productOf(int arr[3]) {
int product = 1;
for(int i=0; i<sizeof(arr)/sizeof(int); i++)
{
product = product * arr;
}
return product;
}
int main() {
int arr[] = { 1, 2, 3 };
std::cout << productOf(arr);
}
This catches many (all) newbies off guard. "Why does this print 1," they say. "Shouldn't it print 6?"
I'm wary of the talk of "idiomatic C++" - surely the objective is to write useful programs that (mostly, at least) work rather than to be particularly idiomatic? Something is also ringing the Fred Brooks/"No Silver Bullet" bell in the back of my brain here too...
So you also avoid using forks, spoons, and knives when eating right? Because you know... you can eat hot soup with your fingers. Idiomatic C++ is C++ that most people (who know C++) can understand. It doesn't mean you have to template the hell out of your code, it means that you should use those containers, algorithms, and functions provided when appropriate. Avoiding std::vector "because pointers work too" is just stupid.