相关疑难解决方法(0)

强制g ++零初始化内存

我想写一些我正在编写的库的单元测试

我有一个看起来像这样的课程:

class A
{
public:
    A(B* pB)
    // construction details, involves my library
    // but ultimately there is a new being done ,)

    B* m_pB;
};
Run Code Online (Sandbox Code Playgroud)

我想检查指针m_pB是否实际初始化,所以我沿着这些方向做了一些事情:

A* p = // creation of this object involves my library
BOOST_REQUIRE( p->m_pB != NULL );
Run Code Online (Sandbox Code Playgroud)

但它发生了g ++没有对内存进行零初始化,因此值p->m_pB只是随机的.当我new对象时,有没有办法强制g ++为我初始化这个内存?

我相信Visual Studio会根据特定代码执行类似的操作,具体取决于内存的分配位置.

编辑:我现在可以想到2个备份解决方案:使用智能指针,或编写新的运算符......

c++ g++

1
推荐指数
2
解决办法
880
查看次数

这两个构造函数调用之间的区别

可能重复:
类型名称后的括号是否与new有所不同?

我相信这个问题已经被问到了,但我找不到快速搜索.

Foo ob* = new Foo; 

Foo ob* = new Foo();
Run Code Online (Sandbox Code Playgroud)

这两种在C++中创建对象的方法有区别吗?如果没有,那么其中一个被认为是不好的做法?每个编译器都会对它进行相同的处理吗?

c++ constructor

1
推荐指数
1
解决办法
283
查看次数

隐式创建的默认构造函数是否负责分配对象内存?

www.fredosaurus.com 说明这一点:

创建类的对象时,C++会调用该类的构造函数.如果没有定义构造函数,C++将调用默认构造函数,该构造函数为对象分配内存,但不初始化它.

但我认为构造函数只负责初始化数据成员.我的理解不正确吗?

c++ constructor

1
推荐指数
1
解决办法
133
查看次数

主要无效并使Dos程序不会死亡

可能重复:
void main和int main之间的区别?

好吧,所以我正在使用流血的编译器,我应该注意的第一件事是我使用2001版C++作为绝对的初学者,自2001年以来C++是否有任何改变会影响本书的有效性?我问,因为我知道php有php5,现在是php6,但我还没有看到任何C++ 03.

现在我之所以这么说,在它使用的代码中,

void main (void)
Run Code Online (Sandbox Code Playgroud)

为什么我要一个论证无效?这是做什么的.

但是当我void main (void)在我的编译器中运行时,它说main必须在它之前有一个"int".所以我不能有"无效"主(无效);

此外,一旦代码运行,只要没有"cin",程序就会关闭.这是正常的行为,除了在我的程序结束时制作一个cin之外,还有更好的方法来阻止它吗?

c++ void

0
推荐指数
1
解决办法
207
查看次数

c ++中的向下转换问题

#include <iostream>
using std::cout;
using std::endl;
class Base
{
public :
    void f();
    void g();

    int mBaseData1;

};

class Derived : public Base
{
public : 


    int mDerivedData1;
};

void main()
{

    Base* base = new Base();
    Derived* derived = (Derived*)(base); // DownCast
    derived->mDerivedData1 = 6;
    cout<< derived->mDerivedData1<<endl; // Result = 6;
}
Run Code Online (Sandbox Code Playgroud)

在此代码中 new base()分配堆中的内存

并将Derived* derived = (Derived*)(base)基数转换为派生的

我们如何使用mDerivedData1?我无法找到为mDerivedData1分配内存的位置,或者当我们调用Derived的构造函数来分配mDerivedData1时?

c++

0
推荐指数
1
解决办法
2207
查看次数

在其他范围内为指针创建实例

我有两种方法来为指针创建实例.但其中一个会失败.

class A {
public:
    int num;
};

void testPointer1(A* a){
    a = new A();
    a->num = 10;
}
A* testPointer2(){
    A* a = new A();
    a->num = 10;
    return a;
}
void testPointer() {
    A* a1 = NULL;
    testPointer1(a1); // this one fails
    //cout << a1->num << endl; // segmentation fault

    A* a2 = NULL;
    a2 = testPointer2();
    cout << a2->num << endl;
}
Run Code Online (Sandbox Code Playgroud)

为什么testPointer1错了?

c++ pointers

0
推荐指数
1
解决办法
211
查看次数

为什么Compiler-Emitted C++默认构造函数"不好"?

可能有人请解释一下何谓以下

如果类定义成员变量且没有其他构造函数,则必须定义默认构造函数.否则编译器会为你做这件事,非常糟糕.

他们所谓的"严重"是什么?

c++ default-constructor

0
推荐指数
2
解决办法
625
查看次数

对象创建差异

创建对象的以下两种方法有什么区别?

Test* t = new Test();
Run Code Online (Sandbox Code Playgroud)

Test* t;
Run Code Online (Sandbox Code Playgroud)

你对第二个样本的答案与我认为它会做的事情相匹配(没有创建对象)但是

class Test {
        public:
                void bla(void) {
                        std::cout << "test" << std::endl;
                };
};

int main(void) {
        Test* test;
        test->bla();
}
Run Code Online (Sandbox Code Playgroud)

给我输出"测试"......所以实际上有一个对象

c++ allocation object

0
推荐指数
1
解决办法
174
查看次数

结构中的"new/delete"代替"malloc/free"在C++中有多好?

很多次,我在C++代码指针中看到了结构的分配;

struct Current{
int amp;
};

Current *cur = new Current();
Run Code Online (Sandbox Code Playgroud)

但是,"Current"是一个结构而不是类,但在C++中受支持.如何使用它来代替C类型分配,如下所示:

Current *cur = (Current*) malloc (sizeof(Current));
Run Code Online (Sandbox Code Playgroud)

这背后的基本概念是什么?我所知道的是,"结构"在C++中被认为是"类".

已知C++中struct-VS-class的概念.查询主要是关于具体的用例,因为两者都是允许的,但是应该优先考虑,为什么?

c++ struct class

0
推荐指数
1
解决办法
214
查看次数

有多少新的内存初始化对象?

我们知道malloc给出了unintialize内存,而calloc用零初始化内存.那么c ++中的新运算符给出什么值时初始化对象?

c++

-2
推荐指数
1
解决办法
141
查看次数