使用类指针与实例

Using class pointers vs instance

本文关键字:实例 指针      更新时间:2023-10-16

我不明白的是,使用指向类的指针和生成它的新实例有什么区别。这只是为了性能?在这里,我创建了一个类,并将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();