小编Mar*_*arc的帖子

从复制构造函数调用默认赋值运算符是不好的形式?

考虑一类需要复制的副本.副本中的绝大多数数据元素必须严格反映原始数据元素,但是有少数元素的状态不被保留且需要重新初始化.

从复制构造函数调用默认赋值运算符是不好的形式?

默认赋值运算符对于Plain Old Data(int,double,char,short)以及每个赋值运算符的用户定义类都表现良好.指针需要单独处理.

一个缺点是该方法使得赋值运算符瘫痪,因为不执行额外的重新初始化.也无法禁用赋值运算符的使用,从而通过使用不完整的默认赋值运算符打开用户创建损坏类的选项A obj1,obj2; obj2=obj1; /* Could result is an incorrectly initialized obj2 */.

a(orig.a),b(orig.b)...除了a(0),b(0) ...必须写之外,放宽要求是很好的.需要写入所有初始化两次会产生两个错误位置,如果double x,y,z要将新变量(例如)添加到类中,初始化代码需要在至少2个位置而不是1个位置正确添加.

有没有更好的办法?

在C++ 0x中有更好的方法吗?

class A {
  public:
    A(): a(0),b(0),c(0),d(0)
    A(const A & orig){
      *this = orig;       /* <----- is this "bad"? */
      c = int();
    }
  public:
    int a,b,c,d;
};

A X;
X.a = 123;
X.b = 456;
X.c = 789;
X.d = 987;

A Y(X);

printf("X: %d %d %d %d\n",X.a,X.b,X.c,X.d); …
Run Code Online (Sandbox Code Playgroud)

c++ constructor copy-constructor assignment-operator c++11

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

使用C/C++从库中解压缩可执行文件

我正在开发一个在业务过程中使用一个或多个帮助程序可执行文件的库.我当前的实现要求用户在已知位置的系统上安装帮助程序可执行文件.要使库正常运行,帮助应用程序必须位于正确的位置并且是正确的版本.

我想删除以上述方式配置系统的要求.

有没有办法捆绑库中的帮助程序可执行文件,以便它可以在运行时解压缩,安装在临时目录中,并在一次运行期间使用?在运行结束时,可以删除临时可执行文件.

我已经考虑过自动生成一个包含unsigned char数组的文件,该数组包含可执行文件的文本.这将在编译时完成,作为构建过程的一部分.在运行时,此字符串将写入文件,从而创建可执行文件.

如果不将可执行文件写入磁盘(可能是某种RAM磁盘),是否可以执行此类任务?我可以设想某些病毒扫描程序和其他安全软件反对这种操作.还有其他问题我应该担心吗?

该库正在使用C/C++开发,以便在Windows和Linux上进行跨平台使用.

c c++ filesystems cross-platform iterable-unpacking

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

链接与使用以前版本的Visual Studio构建的第三方静态库时出错

我正在开发一个链接到第三方静态库的项目(herin称为EXTERNALLIB).在Visual Studio 2005中,我能够链接到EXTERNALLIB并创建可用的可执行文件.现在我们正在使用Visual Studio 2008,我收到以下错误:

fatal error C1047: The object or library file EXTERNALLIB was created with an older compiler than other objects; rebuild old objects and libraries.
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉编译器正确链接到EXTERNALLIB?我认为问题可能与特定的调用约定有关(__ stdcall,__ cdecl,__ clrcall,__ thishisall).我可以在新程序中指出旧库的正确调用约定吗?是否有我可以提供给我们供应商的具体反馈(例如在头文件中使用API​​ENTRY),以便将来的编译器升级不会出现此问题?

代码是用C++编写的.我无法访问EXTERNALLIB的代码,因此我无法自己重建它.

c c++ visual-studio-2005 calling-convention visual-studio-2008

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