C++ 是否有一种声明和初始化指针变量的单行方法?

C++ 是否有一种声明和初始化指针变量的单行方法?,c++,pointers,return,delete-operator,C++,Pointers,Return,Delete Operator,当我需要创建指针变量时,我目前使用以下有效的方法: int getIntPointer() { int * intPointer = new int; *intPointer = 0; return *intPointer; } 同样,当从另一个函数返回这样的指针时,我会在main()中使用类似这样的内容: int main() { int * intPointer = new int; *intPointer = getIntPointer();

当我需要创建指针变量时,我目前使用以下有效的方法:

int getIntPointer()
{
    int * intPointer = new int;
    *intPointer = 0;

     return *intPointer;
}
同样,当从另一个函数返回这样的指针时,我会在main()中使用类似这样的内容:

int main()
{
    int * intPointer = new int;
    *intPointer = getIntPointer();

    delete intPointer;
 }
这一切都是可行的,但为了可读性和效率,我想知道是否有一行等价物。(我并不是要把它们放在同一条线上,我是指一种简捷的方法。)

另外:在上面的这个例子中,我在两个函数中使用了相同的指针变量,它可以工作。它们在内存中是同一个指针吗?添加如下内容:

delete intPointer; 
return语句之后不会立即使程序崩溃,但它是否达到了目的呢?或者,当不再需要时,只删除它在main中传递的迭代是否安全?

您可以执行以下操作:

int *intPointer = new int(0); 
(或
new int(100);
如果希望
intPointer
指向值100)

当然,您可以将其缩短为:

return new int(0);
假设您不需要对指针执行任何其他操作

请注意:

int * intPointer = new int;
*intPointer = getIntPointer();
这是不正确的。你的意思是:

int * intPointer = new int;
intPointer = getIntPointer();
在这种情况下,这是内存泄漏,因为您正在用调用创建的指针覆盖
new
中的
intPointer

或者你的意思是写:

int * intPointer = new int;
*intPointer = *getIntPointer();
在这种情况下,会出现内存泄漏,因为
getIntPointer
调用了
new
,并且由于未保存返回值而“丢失”了该指针

对于您调用的每一个
new
,您都应该有一个对应的
delete
,否则就是内存泄漏。因为我上面的两个例子都没有提供,因为这两种情况都会丢失从
new
返回的一个指针,所以这是不正确的

一般来说,最好不要使用“原始指针”,而是使用
std::unique_ptr
(如果您希望指针一次只在一个地方“活动”)或
std::shared_ptr
(如果您希望多个对象都有指针的副本)


编辑:我上面的回答假设
getIntPointer
实际上做的是名称所描述的,而不是问题中的代码所做的,这是相当糟糕的设计:分配内存,然后返回指向的值。

我可能错了,但我认为您正在使用
std::shared_ptr
及其助手功能
std::make_shared

std::shared_ptr< int > intPointer = std::make_shared< int >( 42 );
std::shared_ptrintPointer=std::make_shared(42);
与其在这里重复智能指针的所有用例,我只想


inb4关于为什么智能指针是好的还是坏的咆哮。

第二个问题(关于它们在内存中是同一个指针?)怎么样?谢谢!在课堂上,我们实际上得到了三行示例,我找不到任何关于在一行中完成的参考。这很有帮助!那不是一个完整的程序><当我问起这个问题时,我是绝对清楚的。我只是为了了解更多而写一些片段。显然,没有删除是内存泄漏,但我想把这一部分留给另一件事。问题是,如果我在返回时不将其创建为新的,IDE会向我抛出多个错误。就我所能找到的而言,创建副本确实是实际使用它的唯一方法,但我担心内存泄漏,所以我想知道处理这种情况的最佳方法。我不打算写一个完整的程序只是为了问一个问题(再次),所以请试着理解我只是在举一个例子。我想知道在函数结束时以及在main中使用之后该做什么。我想说,如果你必须调用
new
来获取
int
值,那么你几乎肯定是做错了。@Elliander现在做了,显然我来的太早了:)谢谢!