There is no need for reference counts nor smart pointers

Started by
13 comments, last by MaulingMonkey 19 years, 6 months ago
Quote:Original post by iMalc
Quote:Original post by silvia_steven_2000

this is what actuallay I meant to write. I did that by intention.
when u chose a strange title u get your massage read by the max
number of people.
Ah yes, but many people will just assume you are a troll, and we all know not to feed the trolls.

Not all of us do. Take me, for example. I am an idiot(tm). I feed trolls.

Then again, sometimes the troll dies in the feeding, if my cooking is a bit off. So I suppose it's for the common good.

</random>

void simple_example_of_when_smart_pointers_would_be_nice ( void ){    int * this_should_have_been_a_smart_pointer = new int[100];    if(pie && foo)    {        if (lord_fnordicus_has_returned() && !mariners_win())        {            switch (ham_type)            {                case HAM_WITH_WHIPCREAM:                    std::cout << "EWWWW" << std::endl;                    return; //memory leak                default:                    cookie_monster += 12;                    break;            }            if (swiss_cheeze)            {                std::cout << "IT'S CHEESE YOU BUFFOON" << std::endl;                swiss_cheese = 1;                throw new pie(); //memory leak            }            else            {                if (elvis.alive()) return; //edit: I frogot to mark this as amemory leak on the first pass.            }        } else if (lord_poppeye_has_returned()) {            eat_hot_integer_array( this_should_have_been_a_smart_pointer );        }        swiss_cheese && (teh_yummeh = 1);        lolzorz || (we_are_safe = 1);    } else if (pie) {        throw std::execption(); //memory leak    } else if (foo) {        call_some_function_that_will_throw_without_us_realizing_it(); //memory leak    } else {        sexy_momma = 0;        return; //memory leak    }    delete[] this_should_have_been_a_smart_pointer; //cleanup}
Advertisement
in fact, after developing program you theoretically can remove most refcounts. (in simpler programs you typically can remove all refcounts.)

How compiler can (theoretically can) remove refcounts: like any other known-at-compile-time thing.

Inline your
if(!refcount){allocate what you want;};
refcount++
and
refcount--;
if(!refcount){deallocate what you want;}

And then step along program flow and for every refcount++ and refcount-- operator check if refcount can be calculated at compile time, not at runtime .
It's quite hard but possible. And most of refcounts can be calculated at compile time.

BUT:
With complexs programs, some refcounts can't be calculated at compile time. Even in complex program it's probably small precent of 'em.
Quote:Original post by silvia_steven_2000
since the execution is done sequentially
I don't think anyone else has mentioned it yet, so I will. Execution does not have to be sequential. In a single-threaded program, you are correct, but reference counting can help out tremendously in multi-threaded programs. At least, that's my experience.
"We should have a great fewer disputes in the world if words were taken for what they are, the signs of our ideas only, and not for things themselves." - John Locke
yes, I was talking about single threaded applications
A simple situation in which resource counting is useful in single-threaded situations is one where you need to keep memory use down (aka, to meet a certain "target" RAM use max, or a limit not breakable via virtual paging (embedded systems for example)).

Although you could simply load/decompress the resource for the program's lifetime, it does take up memory. Resource counting would let the application know when it could free that resource.

This topic is closed to new replies.

Advertisement