相关疑难解决方法(0)

包含其他对象的类的C++隐式复制构造函数

我知道如果你没有自己实现,编译器有时会提供一个默认的复制构造函数.我很困惑这个构造函数到底是做什么的.如果我有一个包含其他对象的类,其中没有一个具有声明的复制构造函数,那么行为是什么?例如,像这样的类:

class Foo {
  Bar bar;
};

class Bar {
  int i;
  Baz baz;
};

class Baz {
  int j;
};
Run Code Online (Sandbox Code Playgroud)

现在,如果我这样做:

Foo f1;
Foo f2(f1);
Run Code Online (Sandbox Code Playgroud)

默认的复制构造函数会做什么?将编译器生成的复制构造函数Foo调用编译器生成的构造函数Bar进行复制bar,然后调用编译器生成的复制构造函数Baz吗?

c++ contains composition default-copy-constructor

47
推荐指数
2
解决办法
3万
查看次数

内存仍然可以修复错误,但为什么?

我正在尝试使用共享库来构建模块化程序.

有两个要编译的cpp文件:

共享库,用.编译

g ++ -fPIC -shared module.cpp -o module.so

//module.cpp
#include <iostream>
Run Code Online (Sandbox Code Playgroud)

文件使用共享库,编译用

g ++ src/main.cpp -ldl -o binary

要么

g ++ -DFIX src/main.cpp -ldl -o binary

//main.cpp
#include <dlfcn.h>
#ifdef FIX
# include <iostream>
#endif

int main()
{
   void* h = dlopen("./module.so", RTLD_LAZY);
   if ( h )
   {
      dlclose(h);
   }
}
Run Code Online (Sandbox Code Playgroud)

使用FIXundefined,valgrind会报告很多仍然可访问的内存(5,373bytes),如果已FIX定义,则不会泄漏任何内存.

iostream在共享库中使用有什么问题?

g ++ - 4.6,g ++ - 4.7和g ++ - 4.8会出现此问题.g ++ - 4.4不显示此行为.遗憾的是,我没有其他编译器可以测试(我不想因此而切换到g ++ - 4.4).

更新:

使用其他标志编译共享库文件-static-libstdc++ -static-libgcc …

c++ linux memory-leaks g++ shared-libraries

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