相关疑难解决方法(0)

什么是三法则?

  • 什么是抄袭的对象是什么意思?
  • 什么是复制构造函数复制赋值运算符
  • 我什么时候需要自己申报?
  • 如何防止复制对象?

c++ c++-faq copy-constructor assignment-operator rule-of-three

2067
推荐指数
8
解决办法
27万
查看次数

什么是移动语义?

我刚刚听完了Scott Meyers关于C++ 0x的软件工程电台播客采访.大多数新功能对我来说都很有意义,我现在对C++ 0x感到兴奋,除了一个.我仍然没有得到移动语义 ......它们究竟是什么?

c++ c++-faq move-semantics c++11

1614
推荐指数
11
解决办法
39万
查看次数

动态分配对象数组

这是一个初学者的问题,但我很长一段时间没有做过C++,所以这里......

我有一个包含动态分配数组的类,比方说

class A
{
    int* myArray;
    A()
    {
        myArray = 0;
    }
    A(int size)
    {
        myArray = new int[size];
    }
    ~A()
    {
        // Note that as per MikeB's helpful style critique, no need to check against 0.
        delete [] myArray;
    }
}
Run Code Online (Sandbox Code Playgroud)

但现在我想创建一个动态分配的这些类的数组.这是我目前的代码:

A* arrayOfAs = new A[5];
for (int i = 0; i < 5; ++i)
{
    arrayOfAs[i] = A(3);
}
Run Code Online (Sandbox Code Playgroud)

但这种情况非常糟糕.因为在循环迭代完成时,A(通过A(3)调用)创建的新对象会被破坏for,这意味着myArrayA实例的内部delete []变为-ed.

所以我认为我的语法必定是非常错误的?我想有一些看起来像矫枉过正的修复,我希望避免:

  • 为...创建复制构造函数A …

c++ pointers destructor memory-management copy-constructor

56
推荐指数
3
解决办法
13万
查看次数

双重免费或损坏(如果重新排序行,则运行正常)

使用链接中的示例,但更改为使用char *vector:

#include <vector>
using namespace std;

class Test{
    char *myArray;

public:
    Test(){
        myArray = new char[10];
    }

    ~Test(){
        delete[] myArray;
    }   
};  


int main(){
    vector<Test> q; // line 1
    Test t;         // line 2
    q.push_back(t);
}
Run Code Online (Sandbox Code Playgroud)

它会导致双重释放或损坏错误.但是,如果在第1行之前运行第2行,例如:

Test t;
vector<Test> q;
Run Code Online (Sandbox Code Playgroud)

然后运行正常.这是为什么?

在Xubuntu 12.04 g ++ 4.6.3上测试.

更新:

这不是重复的问题.我理解需要一个复制构造函数和赋值运算符(它已在上面的示例代码所在的链接中得到了解答).但是,在原始链接中使用int *queue类似,但交换第1行和第2行仍然存在错误.仅在使用char *,并且vector和交换1号线和2号线会不会导致错误.我的问题是为什么这个特例?任何人都可以在您的平台上查看它吗

c++

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