使用类指针与实例
Using class pointers vs instance
我不明白的是,使用指向类的指针和生成它的新实例有什么区别。这只是为了性能?在这里,我创建了一个类,并将m作为指向该类的指针,将n作为该类的实例。还有一个问题:我可以让一个指针成为类并使用另一个构造函数吗?像myClass* p(7); p->afis();
?
#include <iostream>
using namespace std;
class myClass
{
int a;
public:
myClass(void);
myClass(int);
void afis();
~myClass(void);
};
myClass::myClass(void)
{
a = 5;
}
myClass::myClass(int nr)
{
a = nr;
}
void myClass::afis()
{
cout << a;
}
myClass::~myClass()
{
}
int main()
{
myClass* m; //<--
m->afis();
myClass n(7); //<--
n.afis();
cin.get();
}
myClass* m;
只是指向类型myClass
的指针,它不指向任何有效对象,取消引用这样的指针是未定义的行为。
未定义的行为意味着你的程序无效,它可能看起来可以工作,或者可能崩溃,或者可能表现出任何奇怪的行为,所有的安全赌注都是无效的。所以,仅仅因为你的程序可以工作并不意味着它是安全的,它将永远工作。
要编写一个有效的程序,必须使指针指向一个有效对象
例如:
myClass obj;
myClass*m = &obj;
在第二种情况下:
myClass n(7);
它通过调用myClass
的构造函数来创建myClass
类型的对象n
,该构造函数接受一个int
类型的参数
这是创建对象的有效方法。
我可以为类制作一个指针并使用另一个构造函数吗
制作指针不调用构造函数。在将指针设置为某个对象(可能是用new
创建的全新对象)的地址之前,指针是未初始化的。
myClass* m; //<-- m->afis();
这是未定义的行为,因为m
尚未初始化,所以您有一个野生指针。
更好:
std::unique_ptr<myClass> m(new myClass(constructor, args, here));
m->afis();
相关文章:
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 初始化指向类实例的智能指针并访问其方法
- 为什么我们不在下面给出的代码中使用指针来实例化C++的实体对象?
- 为什么我不能引用指向实例化对象的函数的指针?
- 返回的指针属性中类实例上的矢量属性消失
- 返回 C++ 中的指针实例变量
- <Base> <Derived> 具有相同原始指针共享引用的 shared_ptr 和 shared_ptr 实例是否计数?
- 是否可以将指向未实例化的对象的指针用作C++中的变量?
- 将基本实例指针强制转换为派生实例指针是否合法?(实例不是派生实例)
- 为什么在使用指针时不采用类成员的默认值,而不是直接实例化对象时?
- 对于多态类型T,如何在没有类型T实例的情况下获得指向T的虚拟表的指针
- 指向类实例的指针
- 可以在指向不同模板类实例的指针之间进行强制转换吗
- 为共享指针C++单独实例化对象
- 为什么不能在实例化对基类的引用的同时实例化指向派生类的指针?
- C++:易失性实例中的易失性成员函数 - 将数组分配给指针是无效的转换?
- 模板类实例化中的指针转换无效
- Cython - 分配 C++ 类实例指针时的分段错误
- 一个唯一的ptr类如何将它的实例指针传递给它的成员对象
- 类实例指针或函数指针