In your specific example, it could look like this:
static maxon::Result<NodeData*> Alloc()
{
iferr_scope;
return NewObj(SoloPrefs) iferr_return;
}
And when you construct your NodeDataclass, you have to access the actual value of maxon::Result:
SoloPrefs::Alloc().GetValue();
Note, if that allocation fails that you can access the error with GetError().
There have changed lots of things, Sebastian already posted the links to the relevant documentation.