Skip to main content

C++ sucks part one

This is going to be too much to fit in one post. So lets start with the most provocative.

I'm over Constructors and Deconstructors

It's such a staple of OOP and yet I could seriously do without them now. If you're like me you learned these are great places to create/delete required objects, open/close files and all that stuff. But it just causes trouble.

Here's a typical example:

MyObject()
{
anotherObject = new AnotherObject();
fileHandle = open("configfile.xml");
}
~MyObject()
{
close(fileHandle);
delete anotherObject;
}


Great! What could be wrong with that? We'll there's two things.

1. You want to customise things in a child class
Ideally you shouldn't need to mess with the parent. Maybe due to some rules on shared code you can't change the parent (easily). But if you want anotherObject to be CustomObject and use a different filename you end up with this crap:

MyObjectChild() : MyObject()
{
delete anotherObject;
anotherObject = new CustomObject();
close(fileHandle);
fileHandle = open("myfile.xml");
}

Ugh. It's terrible! You'd never do this on a normal 'virtual' function. You'd just not call the parent. But with a constructor and deconstructor you don't have a choice.

2. You're running unit tests
Don't tell me you're not writing tests! But you don't want the object opening a file. That means you have to mess with a file just to run a test case. And perhaps CustomObject does stuff you don't want too. But you can't change it to never construct. Both will happen no matter what you try and do with a child class. So you're in the shit now.

So what can you do?
I'm half tempted to replace my constructors with a macro (except they're evil) as they are all starting to look like this:

MyObject(AnotherObject * _anotherObject, int _fileHandle) :
anotherObject(_anotherObject),
fileHandle(_fileHandle)
{
}

There's times when the construction order wont let you do that. But then you have to pass in a factory object and that can open a whole new can of worms.

Most of these problems are common to OO languages. But it's just one reason why C++ sucks.

Comments

Popular posts from this blog

RestFixture

So most of the tests I'm writing now in Fitnesse are using RestFixture . Being able to do all this black box style testing has helped me get a lot of tests up and running without having to change the existing code base. Now I've taken a step future with my own little fork  so I can use scenarios and build nice BDD style scripts. But first I want to give me own quick guide to using RestFixture Step 1: Installing You can dive straight in by grabbing the latest jar files for RestFixture here  https://github.com/smartrics/RestFixture/downloads If you know what you're doing can get the nodep version to work nicely along side other libraries you may be including in Fitnesse. But I grabbed the 'full' version and unzipped it into a RestFixture folder alongside my FitNesseRoot folder. Step 2: Write your first test I took advantage of the built in Fitnesse api as a basic test and wrote a page called RestFixture with the following contents !define TEST_SYSTEM {slim} !

A brief introduction

And then I'll get into my first rant. I'm some guy who thinks about stuff. Stuff you probably don't care about but I'm going to tell you anyway! Now I don't think I'm going to cure cancer or create world peace but it'd be nice if I could make the world a little better. Stuff I'd like to talk about will focus on: Games I've always been a game player and am fascinated in how one designs a game. Yes it's mostly computer games these days and even then it's mostly consumed by World of Warcraft . Shut-up you in the back! We all have our vices and I'll avoid sniggering at your hentai collection if you leave my level 80 mage alone. Programming Only 2 years ago I was introduced to this weird concept of Test Driven Developmen t and the broader concept of Agile . Programming has been part of my life since I was eight. When I haven't been doing it professionally I've found myself doing it more in my free time. So it's nice that after 20+