Когда они представлены в памяти, объекты C ++ совпадают со структурами C?
Например, с C я мог бы сделать что-то вроде этого:
struct myObj {
int myInt;
char myVarChar;
};
int main() {
myObj * testObj = (myObj *) malloc(sizeof(int)+5);
testObj->myInt = 3;
strcpy((char*)&testObj->myVarChar, "test");
printf("String: %s", (char *) &testObj->myVarChar);
}
Я не думаю, что C ++ позволяет перегрузить оператор +
для встроенного типа char *
.
Итак, я хотел бы создать свой собственный легкий класс строк, который не имеет дополнительных издержек, которые есть у std::string
. Я думаю, что std::string
представляется смежно:
(int)length, (char[])data
Мне нужна точно такая же функциональность, но без префикса длины (экономия 8 байтов).
Вот код, который я использую для тестирования, но это приводит к segfault
#include <iostream>
using namespace std;
class pString {
public:
char c;
pString * pString::operator=(const char *);
};
pString * pString::operator=(const char * buff) {
cout << "Address of this: " << (uint32_t) this << endl;
cout << "Address of this->c: " << (uint32_t) &this->c << endl;
realloc(this, strlen(buff)+1);
memcpy(this, buff, strlen(buff));
*(this+strlen(buff)) = '\0';
return this;
};
struct myObj {
int myInt;
char myVarChar;
};
int main() {
pString * myString = (pString *) malloc(sizeof(pString));
*myString = "testing";
cout << "'" << (char *) myString << "'";
}
Редактировать: никто действительно не понимает, что я хочу сделать. Да, я знаю, что могу иметь указатель на строку в классе, но это на 8 байт дороже, чем простая строка, я хотел точно такое же внутреннее представление. Спасибо за попытку, хотя
Редактировать: конечным результатом того, чего я хотел достичь, была возможность использовать оператор + без использования дополнительной памяти по сравнению с использованием strcat и т. Д.
const char * operator+(const char * first, const char * second);