Редактировать: Спасибо всем.Много отличной информации, чтобы перейти.Мне понадобится время, чтобы поглотить.
После 10 с лишним лет нездорового романа с программированием, я думаю, что я наконец разбираюсь в указателях.Но я до сих пор не доволен ими.
У меня есть относительно простой код:
#include <iostream>
#include <string.h>
using namespace std;
class MyString
{
private:
char* buffer;
public:
//Constructor
MyString(const char* initString)
{
if(initString != NULL)
{
buffer = new char[strlen(initString)+1];
strcpy(buffer, initString);
}
else
buffer = NULL;
}
//Destructor
~MyString()
{
cout << "Invoking destructor, clearing up\n";
if (buffer != NULL)
delete [] buffer;
}
int GetLength()
{
return strlen(buffer);
}
const char* GetString()
{
return buffer;
}
};
int main()
{
MyString SayHello("Hello from String Class");
cout << "String buffer in MyString is " << SayHello.GetLength();
cout << " characters long\n";
cout << "Buffer contains: " << SayHello.GetString() << endl;
return 0;
}
Почему MyString
хочет сделать указатель из первого аргумента (в main()
?) Почему бы просто не пройти мимо копии?или использовать адрес оператора?
Я задаю «неправильный вопрос»?Не видите что-то ясно?
Большое спасибо.Надеюсь, вопрос ясен.