小编Yks*_*nen的帖子

当原始指针和唯一指针都引用同一对象时,如何避免双重释放?

在下面的代码中,x(原始pinter)和p(唯一指针)都指向变量a;所以值“ a”的变化反映了两个指针的取消引用。我知道“ p”拥有&a的所有权。双重释放?

#include <iostream>
#include <memory>

int main() {
    int a = 5;

    int *x = &a;
    std::unique_ptr<int> p(&a);

    *p = 6;
    std::cout<< *x << *p <<'\n';
    // prints 66
    *x =7;
    std::cout <<*x <<*p <<"\n";
    // 77

    std::cout  << "Done!"<<'\n';
}
Run Code Online (Sandbox Code Playgroud)

PS我得到这个运行时错误“指针被释放未分配”

c++ pointers memory-management

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

为什么我可以通过指针更改常量(const char *)的值?

标题说明了一切。如何更改常数的值?这是否与更改常量数组的索引X处的元素的值相同?

    #include<iostream>
    int main(){
        const char* y = "original";
        auto *p = &y;
        *p = "modified";
        std::cout<<y<<"\n";
        //outputs modified
        system("pause");
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

c++ pointers constants

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

cout 宏值未按预期工作

#include<iostream>
using namespace std;

#define C 1<<(8*1)



int main(){
  if(C==256){
    int a=C;
    cout<<a;
  }
}
Run Code Online (Sandbox Code Playgroud)

我的期望是 256,但它打印出 18。这有什么问题吗?谢谢!

c++ printing macros iostream cout

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

有没有办法在 C++ 中创建既可以保存整数又可以保存字符串的数据类型?

有没有办法在 C++ 中创建既可以保存整数又可以保存字符串的数据类型?

例如,创建一个具有名称的数据类型sti,我可以用它定义整数和字符串变量:

sti a = 10; //this is integer
sti b = "Hello"; //and this is string
Run Code Online (Sandbox Code Playgroud)

c++

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

为什么我无法在 C++ 中创建类类型数组?

我正在制作一个汽车租赁系统,我想从父类继承名称。现在我想创建一个汽车数组,其中包含 4 辆不同的汽车。我不想给这个数组一个简单的数据类型,因为这辆车也有它的型号!所以我只想使用抽象数据类型。但是当我用数组写类名(使其成为类的数据类型)时,它说

[Error] field 'Cars' has incomplete type 'Car [4]'.
Run Code Online (Sandbox Code Playgroud)

为什么以及如何解决?

除了抽象数据类型之外我不知道还能做什么。代码在这里:

class Vehicle{
   public:
    string name;
    int model;
    
};
class Car:public Vehicle{
    public:
        int seats;
        Car Cars[4];
        Car(){
    Cars[0].name = "Alto";
    Cars[1].name = "Mercedes";
    Cars[2].name = "Corolla";
    Cars[3].name = "Audi";
}
Run Code Online (Sandbox Code Playgroud)

c++ class

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

使用“空”字符数组中的构造函数时,C++ 错误的 std::string 长度

我在不同的编译器上测试了这个代码片段,但总是得到相同的结果,但我就是不明白为什么。

unsigned char buffer[0x4000] = {0};
string strText((char*)buffer, 0x4000);  
cout << "strlen((char*)buffer) = " << strlen((char*)buffer) << endl;;
cout << "strText.length() = " << strText.length() << endl;
Run Code Online (Sandbox Code Playgroud)

输出是:

strlen((char*)buffer) = 0
strText.length() = 16384
Run Code Online (Sandbox Code Playgroud)

我正在std::stringunsigned char数组创建一个变量(您也可以使用有符号的字符数组,结果是相同的)。在将变量传递给字符串构造函数之前,数组内容被“清零”(根据情况使用 memset 或 C++ 数组初始化)。

如果使用 C 样式函数获取字符串长度strlen((char*)buffer),则结果如预期为“0”。

如果使用方法获取字符串对象的长度,则string::length()该值等于字符串构造函数中传递的数组大小(本例中为 16384)。为什么?

另外,作为副作用,如果使用打印字符串对象的内容,std::cout您会得到一个非常长的空字符串(所有“0”都被“空格”替换)。

我是否应该对 std::string 对象执行一些额外的操作以获得我期望的长度(0)?

谢谢

c++ arrays string string-length

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