通过对象创建C++奇怪的分段错误

rnd*_*gen -1 c++ constructor class object segmentation-fault

启动一个类对象我有一个奇怪的问题.这个问题很奇怪,不易再现.但是我会尝试给出一个指示示例.我有继承类.

class BarClass {
public:
   BarClass() {
      ...
   }
   BarClass(int i, int j) {
      ...
   }
   void doSomething() { ... }
};
class FooClass : public BarClass {
public:
   FooClass() {
   }
   FooClass(int i, int j) : BarClass(i,j) {
      ...
   }
};
Run Code Online (Sandbox Code Playgroud)

有时如果我以下面的方式启动对象,我会通过初始化得到分段错误错误.

FooClass foo1;
foo1.doSomething();
FooClass foo2(10, 20);
foo2.doSomething();
Run Code Online (Sandbox Code Playgroud)

如果我使用显式指针new,那就没关系..

FooClass *foo1= new FooClass();
foo1->doSomething();
FooClass foo2(10, 20);
foo2.doSomething();
Run Code Online (Sandbox Code Playgroud)

以下代码将在第2行给出编译器错误.

FooClass foo1();
foo1.doSomething();
FooClass foo2(10, 20);
foo2.doSomething();
Run Code Online (Sandbox Code Playgroud)

我应该如何正确地启动一个对象,特别是当它有默认构造函数和带参数的对象时.

Cas*_*Cow 7

你的上一期首先......

FooClass foo1();
Run Code Online (Sandbox Code Playgroud)

不会创建FooClass类型的对象,但声明一个名为foo1()的函数,该函数不接受任何参数并返回FooClass.删除括号以创建实例,就像在第一个代码示例中一样.

为什么你得到一个segmmentation错误可能与你的析构函数有关,我们看不到,并且这不会在你的第二个漏洞中被调用.