Erh*_*nis 9 c++ variables heap stack pointers
所以,我总是对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");
?
另外,假设两者兼顾,两者的利弊是什么?
das*_*ght 11
当您通过指针返回时,您需要以您显示的方式返回动态分配的对象(即,如果稍后取消引用,则返回指向堆栈对象的指针会导致未定义的行为).这会产生内存泄漏的可能性,因为正如您所指出的那样,需要明确删除该对象.
另一方面,按值返回(即第二个片段)会导致复制从返回到接收返回值的对象的堆栈对象返回的对象:
std::string res = get_home_folder(); // std::string gets copied into res
编译器可以优化它以避免通过返回值优化进行复制.