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"