如果'Test'是一个普通的类,那么之间有什么区别:
Test* test = new Test;
Run Code Online (Sandbox Code Playgroud)
和
Test* test = new Test();
Run Code Online (Sandbox Code Playgroud) 默认构造函数(由编译器创建)是否初始化内置类型?
c++ constructor initialization default-constructor built-in-types
结构成员和c ++中类成员的默认值是什么,以及这些规则如何不同(例如,类/结构/基元/等之间)?是否存在有关默认值的规则不同的情况?
我的理解是int变量将0自动初始化; 但事实并非如此.下面的代码打印一个随机值.
int main ()
{
int a[10];
int i;
cout << i << endl;
for(int i = 0; i < 10; i++)
cout << a[i] << " ";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我写了一个非常小的Observeable实现.当观察者注册时,它会删除旧观察者并启动新观察者.但是,即使它尚未初始化,它也会尝试删除指针.代码如下:
Observable.h
class Observable
{
public:
Observable();
virtual void registerObserver(Observer * O);
virtual ~Observable();
protected:
Observer * myObserver;
};
Run Code Online (Sandbox Code Playgroud)
Observable.cpp
#include "Observable.h"
Observable::Observable()
{
}
Observable::~Observable()
{
if(myObserver)
delete myObserver;
}
void Observable::registerObserver(Observer * O)
{
if(myObserver)
delete myObserver;
myObserver=O;
}
Run Code Online (Sandbox Code Playgroud)
所有主要做的是
GUI * gui = new GUI(); // GUI extends Observer
Model * m = new Model(); //Model extends Observable
m->registerObserver(gui); //I get a segfault inside this call
Run Code Online (Sandbox Code Playgroud)
如果我单步执行registerObserver,我会看到即使我从未初始化myObserver,语句if(myObserver)的计算结果为true.这导致未初始化的指针被删除并且出现seg错误. …
c++ ×5
constructor ×2
c++-faq ×1
class ×1
new-operator ×1
pointers ×1
qt ×1
struct ×1
variables ×1