小编cga*_*gao的帖子

动态分配的int数组的共享指针触发了一个断点

在此先感谢帮助的人们.我是C++的新手.我正在学习智能指针/共享指针的概念并使用Visual Studio 2013RC.按照维基百科中的示例,我创建了一个像这样的共享指针

SharedPointer.cpp

#include <iostream>
#include <memory>
//using namespace std;
void main(){
    std::shared_ptr<int> sp1(new int(5), std::default_delete<int[]>());
    //std::shared_ptr<int> sp2 = sp1;
    for (int i = 0; i < 5; i++)  sp1.get()[i]= i;
    for (int i = 0; i < 5; i++) std::cout << sp1.get()[i] << std::endl;
    system("pause");
}
Run Code Online (Sandbox Code Playgroud)

该程序编译并打印出0,1,2,3,4没有任何错误,但随后出现了"SharedPointer.exe触发断点"的窗口.

谁能告诉我这个例外的原因是什么?

非常感谢

c++ shared-ptr visual-studio-2013

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

我尝试删除char*时,Debug Assertion失败

我是C++新手并学习虚函数,并且知道如果类有虚函数并且类有指针成员,我们必须编写虚析构函数.下面是我的代码,我正在使用Virtual Studio 2013RC

#include<iostream>

using namespace std;
//base and derived class with virtual function
class Parent{
protected:
    const char *name;
public:
    virtual void say(){ cout << "1" << endl; }
    virtual void showName(){ cout << name << endl; }
    Parent(){};
    Parent(const char *myName) :name(myName){};
    virtual ~Parent(){ delete name; cout << "Parent name deleted" << endl; }
};

class Child :public Parent{
protected:
    const char *name;
public:
    virtual void say(){ cout << "2" << endl; }
    virtual void showName(){ cout << …
Run Code Online (Sandbox Code Playgroud)

c++ char virtual-destructor

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

多个图的一个组合图例条目

出于某种原因,我想分别绘制相同数据的线和标记.

data1 = (1:1:10)';
data2 = (1:2:10);
figure(1);
plot(data1,data1,'or');
hold on;
plot(data2,data2,'-r');
legend('data');
Run Code Online (Sandbox Code Playgroud)

但是它只会显示第一个图的图例.Matlab似乎没有选择操纵图例标记,颜色和线条样式. 在此输入图像描述

我怎么能像这样制作传奇?

在此输入图像描述

谢谢!

matlab plot legend matlab-figure

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

基类构造函数是否在派生类构造函数之前实际调用

我知道这个问题有明确的答案:首先调用基类构造函数,然后调用派生类构造函数.

但我并不完全理解"被叫"这个词.这是否意味着构造函数的使用开始,或构造函数的使用完成?换句话说,下面的代码有两种可能的顺序:

  1. BaseClass构造函数启动 - > BaseClass构造函数完成 - > DerivedClass构造函数启动 - > DerivedClass构造函数完成.

  2. DerivedClass构造函数启动 - > BaseClass构造函数启动 - > BaseClass构造函数完成 - > DerivedClass构造函数完成.

哪一个应该是正确的顺序?如果1是正确的,在初始化DerivedClass实例之前,编译器如何知道调用BaseClass构造函数?

似乎案例2是正确的:"被叫"应该意味着构造函数的完成.后续问题是析构函数如何?我知道标准答案是"派生类的析构函数首先被调用".那么哪个是正确的顺序:

  • DerivedClass析构函数启动
  • DerivedClass析构函数完成
  • BaseClass析构函数启动
  • BaseClass析构函数完成

谢谢

class BaseClass {
public:
    BaseClass() {
        cout << "BaseClass constructor." << endl;
    }
};

class DerivedClass : public BaseClass {
public:
    DerivedClass() : BaseClass() {
        cout << "DerivedClass constructor." << endl;
    }
};

int main() {
    DerivedClass dc;
}
Run Code Online (Sandbox Code Playgroud)

c++ constructor base-class derived-class

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