所以,我一直对 C++ 指针与......无论另一个被称为什么都有些模糊。喜欢,
Object* pointer = new Object();
对比
Object notpointer();
我知道第二个可能涉及指针,但基本上它是一个非指针。(它实际上叫什么?)
此外,我相信对于第一个,您必须致电
delete pointer;
一旦你完成它,在某个时候,对吧?另一个你不需要担心。我读过第一个分配在堆上,但第二个分配在堆栈上,并在方法返回时消失。
然而,当你从一个函数返回一些东西(不是原始的)时呢?
一个很好的例子写在我应该返回 std::strings 吗?:
std::string linux_settings_provider::get_home_folder() {
return std::string(getenv("HOME"));
}
根据我之前写的,字符串是在堆栈上分配的,应该在函数返回时释放,对吧?然而没有人对此说任何话,所以我认为它工作正常。为什么?
一般来说,有什么区别
return new std::string("pointer");
和
return std::string("not-pointer");
?
另外,假设两者都有效,两者的优缺点是什么?