C++;:如何复制std::string* 我如何在C++中复制一个STD::String */

C++;:如何复制std::string* 我如何在C++中复制一个STD::String */,c++,string,C++,String,我想这样做: std::string *str1 = new std::string("test"); std::string *str2 = strdup(str1); delete str1; std::cout << *str2 << std::endl; // result = "test" std::string*str1=新的std::string(“测试”); std::string*str2=strdup(str1); 删除str1; 如果您真的必须

我想这样做:

std::string *str1 = new std::string("test");
std::string *str2 = strdup(str1);

delete str1;

std::cout << *str2 << std::endl; // result = "test"
std::string*str1=新的std::string(“测试”);
std::string*str2=strdup(str1);
删除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;

您可以在不调用new和delete的情况下执行更简单的操作。比如说

std::string *str1 = new std::string("test");
std::string *str2 = str1;

std::cout << *str2 << std::endl; // result = "test"
std::string*str1=新的std::string(“测试”);
std::string*str2=str1;

std::cout一个
std::string
实际上不是堆栈上的字符数组,它只保留一些状态信息,并在堆上有一个指向字符数组的指针,该数组存储了字符串的实际内容。有一些适当的优化使事情复杂化,但这基本上就是
std::string
为您所做的。它提取原始字符数组。所以不要用指针来写代码> STD::String s,而是使用函数中的引用,如:代码> STD::String和,或者更好地使用 const STD::String和。C++学习,是一个练习。我在
类中有一个
std::string*
,我必须在“复制构造函数”函数中初始化它。我认为要做到这一点,我需要复制我的字符串,而不是执行
my_var(this->var)
“而不调用new和delete”:这两个示例仍然使用堆。@我所说的是new和delete组件,而不是类std::string使用堆中的内存。我不确定是否遵循。你说OP不用调用
new
delete
(我同意),就可以做得更简单,但是你的第一个例子使用
new
,第二个例子使用
new
delete
,我不太奇怪他为什么在这个抽象例子中使用指针。他没有问什么是使用指针更好还是不使用指针更好。他的问题不同:如何为指向std::string的指针模拟函数strdup。
std::string *str1 = new std::string("test");
std::string *str2 = str1;

std::cout << *str2 << std::endl; // result = "test"
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"