【发布时间】:2013-09-27 04:19:53
【问题描述】:
所以,我一直对 C++ 指针与......无论另一个指针是什么有点模糊。喜欢,
Object* pointer = new Object();
对比
Object notpointer();
我知道第二个可能涉及指针,但基本上它是一个非指针。 (实际上叫什么?)
另外,我相信对于第一个,你必须调用
delete pointer;
一旦你完成它,在某个时候,对吧?另一个你不需要担心。我读过第一个分配在堆上,但第二个分配在堆栈上,并在方法返回时消失。
但是,当您从函数返回某些东西(不是原始数据)时呢?
一个很好的例子写在Should I return 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");
?
另外,假设两者都有效,两者的优缺点是什么?
【问题讨论】:
-
第二个是函数。
-
您在这里混合了几个概念。指针只是一个可以保存内存地址的变量。
new std::string正在执行内存分配和对象构造。这两个东西不一定要一起使用。在现代 C++ 中,您通常不会这样做。 -
字符串在栈上分配。它没有被释放;它被摧毁了。但是编译器会在销毁之前复制它。
标签: c++ pointers variables heap-memory stack-memory