The my_mat() case... don't use the brackets. Just my_mat; Otherwise it looks like a function call for this to c++. And yeah it's a bit confusing as it works with parameters but not with an empty constructor. Just a c++ thing, stackoverflow has more info about that:
https://stackoverflow.com/questions/180 ... y-brackets
The irr::core::array<irr::scene::ISceneNode*> m_grid_scaffold(0); should actually compile (does here), but won't do what you expect.
The number says how many elements it should put on the array to start with. But it will indeed not initialize that memory. At least not for pointers. I think if you use objects it might call the default-constructor of those objects (I think std::vector actually allows that when you pass a second parameter so you can pass other constructors as well, a missing feature in Irrlicht so far!). So this is useful if you want to pre-allocate memory, when you know the size your array will need. Reason to do that sometimes is that it avoids adding to an array at the end which can triggering expensive memory re-allocations. But yeah, downside when doing that with pointers is - your array will have uninitialized values and you have to be careful.
Note that irr::core::array does initialize it's own member variables in the constructor if that's what you meant. Constructors in c++ can do that. Or if you code in a bit more modern c++ style (compared to what Irrlicht uses) you can just initialize member variables directly where you declare them and those initializations will be used in the constructor.