C++ “是什么意思?”;(*objx).num&引用;在下面的上下文中 类演示 { int-num; 公众: 演示setMyValue(演示*objx) { cout(*objx).num; 返回*objx; } ... };
在此上下文中,“(*objx).num”语句的含义是什么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:这看起来像是一次尝试,但会
它是指针解引用运算符
但是,不先检查
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