相关疑难解决方法(0)

为什么第一个元素被破坏?

我有一段这样的代码:

class Data
{
    public:
        Data(const std::vector<int> &_data)
        {
            my_data = _data;
        }

    private:
        std::vector<int> my_data;
};


int main()
{
    std::vector<std::shared_ptr<Data>> vec = {
        std::shared_ptr<Data>(new Data(std::vector<int>({ 1, 2 ,3 }))),
        std::shared_ptr<Data>(new Data(std::vector<int>({ 3, 4 ,5 })))
    };

    // breakpoint

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

不知何故,当我暂停程序来检查值(在断点处)时,第一个(vec[0])元素被销毁,而第二个元素(vec[1])很好.这里发生了什么?这是编译器中的错误吗?我正在使用新的Visual Studio 2013.

c++ visual-studio-2013

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

在initializer_list vs 2013中双重删除

今天在我的项目中遇到内存问题,使用c ++ 11 initializer_list的类.系统发出内存问题:dbgdel.cpp中的表达式_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse).我将代码简化为一个简单的示例,它不再抛出表达式,但问题从调试输出中变得明显.在我看来这个代码是正确的,它似乎也适用于g ++.

#include <functional>
#include <memory>
#include <string>
#include <iostream>
#include <vector>
#include <map>
#include <sstream>

#include <initializer_list>

using namespace std;

class B {
public:
    char data[256];
    B(const string& x) {
        cout << "Init " << this << endl;
    }
    B(const B& b) {
        cout << "Copy " << this << endl;
    }
    ~B() {
        cout << "Deleting b " << this << endl;
    }
};

class C {
public:
    vector<B> bs;

    C(initializer_list<B> bb) {
        for(auto& …
Run Code Online (Sandbox Code Playgroud)

c++ initializer-list visual-c++ c++11 visual-studio-2013

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