The importance of this is underestimated. With a sanely written C++ program (merely sticking to the modern approaches) memory and resource leaks are a thing of the past, but you still get the completely predictable and deterministic resource management of C.
Unfortunately, you can't use any of that in the kernel [overloading create/destroy new/delete operators won't cut it]. Spinlocks, rwlocks, RCU, slab allocation, per cpu variables, explicit cache flush, memory fence operations, I/O device mappings, ISRs, tasklets, kmalloc vs vmalloc, deadlocks, livelocks, etc. are the issues a kernel programmer has to deal with. Nothing in C++ will help with these and some C++ constructs are actually a hindrance rather than a help.
For instance, copy constructors must be disabled. This was part of a proposal a few years back to make a C++ subset suitable for realtime/embedded. It isn't acceptable to have "x = y" invoke an unexpected amount of code simply because you inadvertantly invoked a copy constructor.
Kernels by their nature are messy. Anybody writing kernel code must be fully aware of the implications of doing something and must be aware of the state they're being called in. Abstraction just makes this job harder not easier.
For example, all kernel code must be compiled with -mno-red-zone because of the threat that any base code could receive an interrupt at any time [even between 2-3 machine instructions that comprise the red zone setup code].
Linux already does a pretty fair job of keeping things clean. If you don't believe that, actually go read the kernel source code. And, if something ends up being crufty, it gets cleaned up. Even if that means that some 100 or so modules need corresponding changes.
As someone who have tought kernel programming and C++ at the same time, I call bullshit on all of that.
Overloading allocation is exactly one of the useful features of C++, and copying is no different than on C. You can in fact even explicitly disable copying or explicitly enforce default copying in C++11. Things that is error-prone and boiler plate code in C is easy in C++. As for memory barriers and all that, C++ is again no different from C. Usually you use compiler extensions or assembler for kind of feature, but it is much easier in C++ where you can create templates and wrappers do use all of this correctly, convientenly and safely.
The abstractions of C++ makes handling most kernel issues easier, but it does require more skill as C++ is greater language, this is also why it was great to teach students C++ by letting them write a kernel, they had to learn what C++ features actually did and which to use and what not to use.
Unfortunately C programmers are a religous sect at this point. The believe C++ is witchcraft because they don't understand it, and refuse to learn.