Linked by MOS6510 on Thu 10th Jan 2013 23:25 UTC
General Development "For years I've tried my damnedest to get away from C. Too simple, too many details to manage, too old and crufty, too low level. I've had intense and torrid love affairs with Java, C++, and Erlang. I've built things I'm proud of with all of them, and yet each has broken my heart. They've made promises they couldn't keep, created cultures that focus on the wrong things, and made devastating tradeoffs that eventually make you suffer painfully. And I keep crawling back to C."
Thread beginning with comment 548433
To view parent comment, click here.
To read all comments associated with this story, please click here.
ebasconp
Member since:
2006-05-09

The C++ way of dealing with problems caused by complexity is to add more complexity.

- Brendan


Are you sure what are you talking about?

C++03:
------
vector<Object*> objs = get_objects();
for (vector<Object*>::const_iterator i = v.begin(); i != v.end(); ++v)
{
cout << (*i)->toString() << endl;
}
for (vector<Object*>::iterator i = v.begin(); i != v.end(); ++v)
delete *i;


C++11:
------
vector<shared_ptr<Object>> objs = get_objects();
for (auto& s : v)
{
cout << s->toString() << endl;
}

The C++11 stuff is easier to read, easier to program, does not need to deal with memory manually and is exception-safe.

Introducing range-based for loops, static type deduction, move semantics, shared pointers and a lot of interesting stuff, they simplified the language, made the libraries more efficient and they kept backwards compatibility.

Edited 2013-01-11 19:48 UTC

Reply Parent Score: 2

Luminair Member since:
2007-03-30

Did you just make code smaller than it needs to be just to make a point, as if lines matter

Reply Parent Score: 2

ebasconp Member since:
2006-05-09

Not at all.

1. I replaced the classical "for loop" for the range based for loop, that hides complexity and improves reading a lot.

2. I used shared_ptr<Object> instead of Object*, so I do not need to iterate through all the vector elements to release them; the shared_ptr does the job.

3. Since the shared_ptr<Object> is a value type (storing a pointer), if an exception occurs, the vector will invoke the Object destructors automatically, making my code exception-safe.

All of that and my code is smaller ;)

Reply Parent Score: 3