在c+;中初始化没有新关键字的字符串指针+; 我使用C++。 我想初始化字符串的指针。我一直在使用: string *strPtr = new string("abcd");

在c+;中初始化没有新关键字的字符串指针+; 我使用C++。 我想初始化字符串的指针。我一直在使用: string *strPtr = new string("abcd");,c++,C++,但我不想使用堆内存。使用这样的东西: string *strPtr; // initialize with "abcd" 如何使用堆栈内存执行此操作?您可以在堆栈上声明一个字符串,然后获取其地址: std::string str{"abcd"}; std::string* ptr_str = &str; 但我相信,处理引用、智能指针或std::string\u视图会更方便。现在,在一些非常特殊的情况下应该使用原始指针。如下: stringstr

但我不想使用堆内存。使用这样的东西:

string *strPtr;
// initialize with "abcd"

如何使用堆栈内存执行此操作?

您可以在堆栈上声明一个字符串,然后获取其地址:

std::string str{"abcd"};
std::string* ptr_str = &str;
但我相信,处理引用、智能指针或
std::string\u视图
会更方便。现在,在一些非常特殊的情况下应该使用原始指针。

如下:

stringstr(“abcd”);
字符串*strprtr=&str;

有时,您可以使用
alloca()
在堆栈上分配内存,您需要分配两次,一次用于元数据,一次用于数据,然后
重新解释cast

最方便的方法可能是直接使用
str
。我建议添加一个使用引用的快速代码示例(是的,提问者应该已经知道了这一点,但问题表明他们没有或没有完全理解)以及可能的
string\u视图
。很好,正确,只是不要使用指针。应该几乎是不必要的…最后一部分是问题的作者:)。谢谢大家的回答。我认为我厌倦了上面的解决方案,并得到了错误,但事实并非如此。我的错。不幸的是,出于某些原因,我不得不将其用作一个点。
alloca()
对于
std::string
来说是非常糟糕的。但是,如果必须的话,更容易的方法是简单地
allloca()
一个大小为
>=sizeof(string)
且添加了正确对齐方式的块,然后使用
placement new
在内存中构造一个新的
string
。只要确保在内存超出范围之前调用
~string()