Answers/Solutions to Exercises in Chapter 8, Exercise 2
E2: Consider a C++ class:
class A {
public:
B* b;
A() { b = new B(1,2); }
~A() { delete b; }
void* operator new(size_t size) {
...
}
};//end class A
When an object of class A is
being constructed, which new is being used to create the
object of class B: the class-A
specific new, or the class-B
specific new, or the global new
?
A2: Of course, the object B inside the object A will be created using class-B specific new (if there is such), if not, it will be created by the global new. You can try it with the following program:
class B { public: int p; B(int i,int j) { p=i+j; } void* operator new(size_t size) { printf("B-new\n"); // create p int *x; x = new int; printf("object B created at address %d\n",x); // return address of p return x; } }; class A { public: B* b; A() { b = new B(1,2); } ~A() { delete b; } void* operator new(size_t size) { printf("A-new\n"); // create b B** x; x = new (B*); printf("object A created at address %d\n",x); // return address of b return x; } };//end class A int main() { A* a1; a1 = new A(); printf("a1 points to %d\n",a1); printf("address of a1->b=%d,value of a1->b->p=%d\n",a1->b,a1->b->p); return 0; }
This program will produce the following output:
A-new object A created at address 4391072 B-new object B created at address 4391024 a1 points to 4391072 address of a1->b=4391024,value of a1->b->p=3
Back to Answers/Solutions Index Back to Answers/Solutions for Chapter 8 Index