In this lab, we’ll show how you can redefine the new/delete operators to achieve a variety of useful or bizarre results.
The files for this lab are available in ~cs253/pub/Labs/NewLab.
As you usual , we have defined a step by step procedure for you. Please follow these step by step tasks and write your brief responses in a .txt file and send it to sobhani@cs.colostate.edu. Make sure the subject of your email is CS253-NEW-LAB .
Please let me know if you have any question in any level.
Consider glob.cc. It redefines the global new
and delete
operators to add trace output. This could be useful in
figuring out just when new
and delete
are being invoked.
Note the function signatures—at this level, new
takes a size_t
and returns a void *
, whereas delete
takes a void *
and
returns void
. Since these functions deal with raw
memory, they work with void *
.
Please explain briefly why new returns void * ?
Consider class.cc. It Redefines the
class-specific new
and delete
operators to add trace output.
This will not affect new
and delete
operations on other types,
such as int
or double
.
operator new
and operator delete
declared static
?
Try to compile forbid.cc. Does it compile? Why not?
forbid-mixin.cc does the same thing as forbid.cc, but does it better.
For another popular example of a mixin, see the Boost class noncopyable
Compile and execute errchk.cc. Observe the error message, and decide what caused it. How would you improve it to detect multiple deletions of the same memory?( You do not need to write the code , just explain it).
If you’re concerned about the contents of deleted memory getting reused, then you might consider the technique used in scrub.cc. What criteria would you use to decide on a value for memory? I think that it should be:
For example, a repeated string of “Jack” or “WTF!” would fit all of the above requirements. Notably, an odd value makes for a poor pointer, and would often cause a segmentation violation upon use.
Run normal.cc.
class Foo
?
p
and q
? Why?
Now, run pool.cc.
class Bar
?
r
and s
? Why?
Of course, it’s a pain to have to redefine new
and delete
for every class. After we study templates, you will be able to
create a templated mixin to do the same for all classes.
new
and delete
for class Foo
,
and then derive class Bar
from class Foo
?
Bar
inherit the redefined new
and delete
?
sizeof(Bar) > sizeof(Foo)
?
NoNewDelete
in
forbid-mixin.cc does—it makes its subclass
require the use of new
.
Modified: 2011-10-17T05:06 User: Guest Check: HTML CSSEdit History Source |
Apply to CSU |
Contact CSU |
Disclaimer |
Equal Opportunity Colorado State University, Fort Collins, CO 80523 USA © 2015 Colorado State University |