Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ “是什么意思?”;(*objx).num&引用;在下面的上下文中 类演示 { int-num; 公众: 演示setMyValue(演示*objx) { cout(*objx).num; 返回*objx; } ... };_C++ - Fatal编程技术网

C++ “是什么意思?”;(*objx).num&引用;在下面的上下文中 类演示 { int-num; 公众: 演示setMyValue(演示*objx) { cout(*objx).num; 返回*objx; } ... };

C++ “是什么意思?”;(*objx).num&引用;在下面的上下文中 类演示 { int-num; 公众: 演示setMyValue(演示*objx) { cout(*objx).num; 返回*objx; } ... };,c++,C++,在此上下文中,“(*objx).num”语句的含义是什么 在程序中使用这种输入方式是一种好的编程习惯吗 它是指针解引用运算符 但是,不先检查NULL就执行此操作不是一个好主意。*是解引用运算符。您也可以执行objx->num(前提是objx!=NULL)。此外,这是很好的风格。大多数人倾向于使用objx->num以提高可读性,但最终(*objx).num是等效的。但是,为了返回对象本身的副本,return*objx是必需的。其他人将#1定义为指针解引用操作符 Re#2:这看起来像是一次尝试,但会

在此上下文中,“(*objx).num”语句的含义是什么

  • 在程序中使用这种输入方式是一种好的编程习惯吗


  • 它是指针解引用运算符


    但是,不先检查
    NULL
    就执行此操作不是一个好主意。

    *
    是解引用运算符。您也可以执行
    objx->num
    (前提是
    objx!=NULL
    )。此外,这是很好的风格。大多数人倾向于使用
    objx->num
    以提高可读性,但最终
    (*objx).num
    是等效的。但是,为了返回对象本身的副本,
    return*objx
    是必需的。

    其他人将#1定义为指针解引用操作符

    Re#2:这看起来像是一次尝试,但会误导用户,并可能导致内存泄漏

    class Demo
    {
    
             int num;
             public:
                   Demo setMyValue(Demo *objx) 
                   {
                       cout<<"\nEnter a number";
                       cin>>(*objx).num;
                       return *objx;
                   }
                   ...
    };
    
    演示a=。。。; 演示b=。。。;
    a=a.setMyValue(b);//为什么要用5种不同的编程语言来标记这个问题,其中大多数语言不适合您的演示代码?1)与
    objx->num
    相同。2)不,不要在C++中使用原始指针。@ Jon Skest-I能够把它去掉,删除另外的4.@丹尼尔·白:是的,但是值得指出的是,OP不应该这样做。@愤怒:我的一些建议并不严格,因为它总是正确的,但它的性质是,如果你必须问,那么建议就适用了。但一旦你明白了哪里不再是真的,你就可以放心地忽略它。这就是说,
    unique\u ptr
    在原始指针上几乎没有开销,可以为您管理对象的生命周期。谢谢……我试过了,它成功了!这里没有内存泄漏,除非
    操作符=
    给出一个。返回一个对象的拷贝是相当奇怪的。”MikeSeymour:我的C++非常薄弱。当
    a=a.setMyValue(b)
    将原始
    a
    设置为
    b
    (实际上将其更改为指向
    b
    )时,原始
    a
    会发生什么情况?它会被使用相同内存的新值覆盖。只有在使用
    new
    创建对象并忘记删除它时,才会出现内存泄漏。
    Demo a = ...;
    Demo b = ...;
    
    a = a.setMyValue(b);  // <- could be a leak