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