Jua*_*esa 2 c++ arrays pointers object
我对C++比较陌生,并且很难理解对象的实例化和对象的指针.
这两个声明在内存和使用方面有何区别?:
MyClass obj1;
MyClass *obj2;
Run Code Online (Sandbox Code Playgroud)
而且我遇到的具体问题是我有一个类有一个无符号短数组,如果我这样做,数组的最后一个空格会改变:
MyClass obj;
obj = MyClass("123");
Run Code Online (Sandbox Code Playgroud)
MyClass有两个构造函数,它们将采用一个int,默认情况下将其赋值为零,并将其拼接为3位或更少的部分.而另一个将采用数字的字符串表示并做同样的事情...希望这是有道理的!
如果我宣布它,它运作良好
MyClass obj = MyClass("123123123");
Run Code Online (Sandbox Code Playgroud)
但如果我以另一种方式这样做,那就不行了.为什么?
区别:
MyClass obj1;
MyClass *obj2;
Run Code Online (Sandbox Code Playgroud)
这里obj1是MyClass的一个实例.
而obj2可能会保存MyClass实例的地址.
此外,obj1将由构造函数自动初始化,而obj2默认情况下未初始化(因此指向随机存储器).初始化后,obj2可以采用特殊值NULL,表示它没有指向对象.
obj2 = &obj1;
Run Code Online (Sandbox Code Playgroud)
这里我们将obj2初始化为指向obj1内存中的地址.如果你改变了obj1的任何成员,那么你可以通过obj2查看它们来看到这些变化(但是因为obj2是你需要取消引用的指针).
obj1.plop = 5;
std::cout << obj1.plop << "\n";
std::cout << obj2->plop << "\n"; Should print the same values.
Run Code Online (Sandbox Code Playgroud)
以下实际上是两件不同的事情:
MyClass obj;
obj = MyClass("123");
Run Code Online (Sandbox Code Playgroud)
这条线可能有效:
MyClass obj = MyClass("123123123");
Run Code Online (Sandbox Code Playgroud)
因为编译器已将其优化为:
MyClass obj("123123123");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1407 次 |
| 最近记录: |