小编she*_*fly的帖子

为什么在使用带有默认构造函数的std :: vector时会看到异常行为?

摘要

我最近在std :: vector上看到了一些问题,出于好奇,我一直在玩它们.我从来没有真正使用STL,但我知道你可以使用vector来处理对象数组的分配,我可以发誓有一种方法可以使用默认构造函数在向量中分配项目.创建.实际上,这个问题使用默认构造函数初始化std :: vector涉及使用复制构造函数和默认值而不是使用默认构造函数初始化向量.

但是,由于我一直在使用C++控制台应用程序项目在Visual Studio 2010中进行一些实验,因此我没有得到与此解释一致的结果.根据上述问题(这里给出)的答案中的一条评论,如果您使用,例如,std::vector<FooClass> FooArray = new std::vector<FooClass>(20);它应该使用默认构造函数,这确实是我期望的行为.

但是我编写了一些跟踪代码来跟踪对象的创建,假设它们是使用默认构造函数创建的,并且看起来每个对象都是刚创建的,随后立即被销毁.最后经过多次搜索,在那里,到处都是,我继续实施了一个复制构造函数,也打印出了信息.我所看到的是,如果我初始化FooClass使用默认值的向量,例如,new std::vector<FooClass>(20, FooClass())然后我得到预期的结果:a FooClass()实例化,向量中的每个项都使用复制构造函数初始化为副本该对象,然后销毁用作默认值的值.

但是,如果我这样做new std::vector<FooClass>(20),而不是使用默认的构造函数,它似乎做了一些(对我来说)奇怪的事情.二十次,FooClass使用默认构造函数创建一个临时对象,通过复制构造函数使用临时构造数组的元素,然后销毁临时对象.

这真的对我没有意义; 但我想知道我是否只是做错了什么.

代码

FooClass.h

#include <stdio.h>

class FooClass
{
public:
    FooClass()
    {
        printf("Foo %i Created!\n", NumFoos);

        myFooNumber = FooClass::NumFoos;
        ++FooClass::NumFoos;
        myIsACopy = false;
    }

    FooClass(const FooClass& Another)
    {
        printf("Foo %i (a copy of Foo %i) Created!\n", FooClass::NumFoos, Another.myFooNumber);

        myFooCopiedFrom = Another.myFooNumber;
        myFooNumber = FooClass::NumFoos;
        ++FooClass::NumFoos;
        myIsACopy …
Run Code Online (Sandbox Code Playgroud)

c++ stl vector visual-studio visual-c++

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

改进这段丑陋的代码

我在VB.net写一个二维码生成器

首先,我检查用户选择的(QR码版本)值.

每个版本具有固定的每个模式的位数(0001,0010,0100,1000).

基本上我现在得到的是以下内容:

Private Function get_number_of_bits() As Integer
    Dim bits As Integer

    If listVersion.Value < 10 Then
        If get_binary_mode(listMode.SelectedItem) = "0001" Then
            bits = 10
        End If
        If get_binary_mode(listMode.SelectedItem) = "0010" Then
            bits = 9
        End If
        If get_binary_mode(listMode.SelectedItem) = "0100" Or _
           get_binary_mode(listMode.SelectedItem) = "1000" Then
            bits = 8
        End If
    ElseIf listVersion.Value < 27 Then
        If get_binary_mode(listMode.SelectedItem) = "0001" Then
            bits = 12
        End If
        If get_binary_mode(listMode.SelectedItem) = "0010" Then
            bits = 11
        End If
        If get_binary_mode(listMode.SelectedItem) …
Run Code Online (Sandbox Code Playgroud)

vb.net qr-code

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

在WinForms之间传递连续数据

我正在制作个人WinForms应用程序.在我的场景中说我有一个C#Form1.Form1不断从互联网上获取实时Exchange数据.现在我点击一个按钮Form1然后Form2打开.现在我想从一些值Form1Form2.

我有一个计时器Form2,可以收集数据,Form1但如何?

我曾尝试使用属性但不能这样做,因为它只更新一次,就像我们初始化Form2时一样.

有解决方案吗

另外,如果不同时创建类的两个表单,如何将它的单个实例传递给它们?

.net c# winforms

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

这段代码可以优化吗?

我想我已经沉迷于优化,所以我想知道以下代码可以"优化":

假设我有一个C语言链表,在创建新元素时我使用以下代码:

log_event_list_cur->next = 
    (struct log_event_list *)malloc(sizeof(struct log_event_list));

log_event_list_cur = log_event_list_cur->next;
Run Code Online (Sandbox Code Playgroud)

我想知道以下代码是否可以:

log_event_list_cur = 
    log_event_list_cur->next = 
        (struct log_event_list *) malloc(sizeof(struct log_event_list));
Run Code Online (Sandbox Code Playgroud)

要么:

log_event_list_cur->next = 
    log_event_list_cur=(struct log_event_list *) malloc....
Run Code Online (Sandbox Code Playgroud)

问候!.

c linked-list list operators

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

标签 统计

.net ×1

c ×1

c# ×1

c++ ×1

linked-list ×1

list ×1

operators ×1

qr-code ×1

stl ×1

vb.net ×1

vector ×1

visual-c++ ×1

visual-studio ×1

winforms ×1