在c ++中,我如何复制std :: string *?
我想做这样的事情:
std::string *str1 = new std::string("test");
std::string *str2 = strdup(str1);
delete str1;
std::cout << *str2 << std::endl; // result = "test"
如果你真的必须使用指针和动态分配(大多数情况下不需要),那么
std::string *str2 = new std::string(*str1);
在现实生活中,
std::string str1 = "test";
std::string str2 = str1;
std::string str1 = "test";
std::string str2 = str1;
你只需要做
std::string *str2 = new std::string(*str1);
std::string str1 = "test";
std::string str2 = str1;
?
std::string *
,我需要在“复制构造函数”函数中对其进行初始化。我认为要做到这一点,我需要复制我的字符串,而不是使用my_var(this->var)
。 - Jérémy Pouyet你可以更简单地实现,而不需要调用 new 和 delete。例如:
std::string *str1 = new std::string("test");
std::string *str2 = str1;
std::cout << *str2 << std::endl; // result = "test"
至少在你的例子中,如果有可能在删除 str1 后访问它,最好写成
std::string *str1 = new std::string("test");
std::string *str2 = new std::string( *str1 );
delete str1;
str1 = nullptr;
std::cout << *str2 << std::endl; // result = "test"
std::string
并不是真正的堆栈上的char数组,它只保留一些状态信息,并具有指向存储字符串实际内容的堆上char数组的指针。虽然有一些优化措施使得情况变得复杂,但这基本上就是std::string
为您完成的工作。它抽象了原始的char数组。因此,在函数中不要使用指向std::string
的指针,而应该像std::string&
那样使用引用,甚至最好使用const std::string&
。 - rwols