1 #include <string.h>
2 #include <vector>
3 #include <iostream>
4
5 class CustomString
6 {
7 public:
CustomString(const char * buffer)8 CustomString (const char* buffer) :
9 m_buffer(nullptr)
10 {
11 if (buffer)
12 {
13 auto l = strlen(buffer);
14 m_buffer = new char[1 + l];
15 strcpy(m_buffer, buffer);
16 }
17 }
18
~CustomString()19 ~CustomString ()
20 {
21 delete[] m_buffer;
22 }
23
24 const char*
GetBuffer()25 GetBuffer ()
26 {
27 return m_buffer;
28 }
29
30 private:
31 char *m_buffer;
32 };
33
34 class NameAndAddress
35 {
36 public:
GetName()37 CustomString& GetName() { return *m_name; }
GetAddress()38 CustomString& GetAddress() { return *m_address; }
NameAndAddress(const char * N,const char * A)39 NameAndAddress(const char* N, const char* A) : m_name(new CustomString(N)), m_address(new CustomString(A))
40 {
41 }
~NameAndAddress()42 ~NameAndAddress()
43 {
44 }
45
46 private:
47 CustomString* m_name;
48 CustomString* m_address;
49 };
50
51 typedef std::vector<NameAndAddress> People;
52
main(int argc,const char * argv[])53 int main (int argc, const char * argv[])
54 {
55 People p;
56 p.push_back(NameAndAddress("Enrico","123 Main Street"));
57 p.push_back(NameAndAddress("Foo","10710 Johnson Avenue")); // Set break point at this line.
58 p.push_back(NameAndAddress("Arpia","6956 Florey Street"));
59 p.push_back(NameAndAddress("Apple","1 Infinite Loop")); // Set break point at this line.
60 p.push_back(NameAndAddress("Richard","9500 Gilman Drive"));
61 p.push_back(NameAndAddress("Bar","3213 Windsor Rd"));
62
63 for (int j = 0; j<p.size(); j++)
64 {
65 NameAndAddress guy = p[j];
66 std::cout << "Person " << j << " is named " << guy.GetName().GetBuffer() << " and lives at " << guy.GetAddress().GetBuffer() << std::endl; // Set break point at this line.
67 }
68
69 return 0;
70
71 }
72
73