#include <iostream>
#include <cstring>
struct test
{
public:
test(const std::string& str) : name(new char[str.length() + 1])
{
strcpy((char*)name, str.c_str());
}
// Rule of three
// -- Copy ctor
// -- Copy assignment operator
// Rule of five
// -- Move ctor
// -- Move assignment operator
~test() { delete[] name; }
void printName() { std::cout << name << std::endl; }
private:
const char* name;
};
int main()
{
std::string s{"test"};
test t{s};
t.printName();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KCnN0cnVjdCB0ZXN0CnsKcHVibGljOgogICAgdGVzdChjb25zdCBzdGQ6OnN0cmluZyYgc3RyKSA6IG5hbWUobmV3IGNoYXJbc3RyLmxlbmd0aCgpICsgMV0pCiAgICB7CiAgICAgICAgc3RyY3B5KChjaGFyKiluYW1lLCBzdHIuY19zdHIoKSk7CiAgICB9CiAgICAvLyBSdWxlIG9mIHRocmVlCiAgICAvLyAgIC0tIENvcHkgY3RvcgogICAgLy8gICAtLSBDb3B5IGFzc2lnbm1lbnQgb3BlcmF0b3IKICAgIC8vIFJ1bGUgb2YgZml2ZQogICAgLy8gICAtLSBNb3ZlIGN0b3IKICAgIC8vICAgLS0gTW92ZSBhc3NpZ25tZW50IG9wZXJhdG9yCiAgICB+dGVzdCgpIHsgZGVsZXRlW10gbmFtZTsgfQogICAgdm9pZCBwcmludE5hbWUoKSB7IHN0ZDo6Y291dCA8PCBuYW1lIDw8IHN0ZDo6ZW5kbDsgfQpwcml2YXRlOgogICAgY29uc3QgY2hhciogbmFtZTsKfTsKCgppbnQgbWFpbigpCnsKICAgIHN0ZDo6c3RyaW5nIHN7InRlc3QifTsKICAgIHRlc3QgdHtzfTsKICAgIHQucHJpbnROYW1lKCk7Cn0=