小编Sim*_*Sim的帖子

包含std :: vector的结构上的Malloc

情况如下:

我使用malloc为结构分配内存.该结构包含各种项目,如指针,字符串变量和向量.

事实是,当我们使用malloc时,不会调用任何构造函数.使用类似于下面的代码,我遇到了一些情况,其中一些变量起作用,而其他变量没有.

注意:以下代码无法编译.它的目的只是为了说明这种情况.

struct MyStruct 
{
    MyClass*    mFirstClass;
    bool        mBool;
    std::string mString;
    std::vector<MyClass> mVector;
};


int main()  
{  

    MyStruct* wMyStructure;  
    wMyStructure = (MyStruct*) malloc (sizeof(MyStruct));  

    MyClass wMyClassObject;

    wMyStructure->mFirstClass = new MyClass();  
    wMyStructure->mFirstClass->func();  
    wMyStructure->mBool = false;  
    wMyStructure->mString = "aString";  
    wMyStructure->mVector.push_back(wMyClassObject);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

通过使用指针而不是那些变量(std::string* mString),然后调用对象构造函数(mString = new std::string;)不会抛出异常.

但是,我遇到过一种情况,即在没有调用构造函数的情况下使用mString没有问题,但是当它来到向量时,应用程序会自动退出.

这给我留下了很多问题:

  1. 如果没有使用构造函数,对象何时会抛出异常?

  2. 在我遇到的情况下,只有向量引起了问题.mString可以保持原样,还是应该调用它的构造函数?

  3. 使用malloc做最重要的事情最安全的方法是什么?

c++ malloc constructor memory-management vector

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

标签 统计

c++ ×1

constructor ×1

malloc ×1

memory-management ×1

vector ×1