小编Tra*_*cer的帖子

使用make_shared时会发生什么

我感兴趣的是这两行代码是否相同:

shared_ptr<int> sp(new int(1)); // double allocation?
shared_ptr<int> sp(make_shared<int>(1)); // just one allocation?
Run Code Online (Sandbox Code Playgroud)

如果这是真的,有人可以解释为什么在第二行只有一个分配?

c++ smart-pointers make-shared c++11

26
推荐指数
2
解决办法
4414
查看次数

编写可变参数模板构造函数

最近我问了这个问题,但现在我想扩大它.我写了以下课程:

template <class T>
class X{
public:
    vector<T> v;
    template <class T>
    X(T n) {
        v.push_back(n);
    }
    template <class T, class... T2>
    X(T n, T2... rest) {
        v.push_back(n);
        X(rest...);
    }
};
Run Code Online (Sandbox Code Playgroud)

使用时创建对象

X<int> obj(1, 2, 3);  // obj.v containts only 1
Run Code Online (Sandbox Code Playgroud)

Vector仅包含第一个值,但不包含其他值.我已经检查并看到构造函数被调用了3次,所以我可能正在创建临时对象并用其余参数填充它们的向量.我该如何解决这个问题?

c++ variadic-templates c++11

20
推荐指数
3
解决办法
2万
查看次数

为什么lambda只捕获自动存储变量?

我刚开始用C++学习lambda函数,我不明白为什么lambda只允许捕获自动存储变量?例如:

int x;
int main() {
    [&x](int n){x = n;}; // 'x' cannot be captured...
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

另一方面,静态变量根本不需要捕获

static int s = 0;
[](int n){s = n;};
Run Code Online (Sandbox Code Playgroud)

那么,为什么不允许第一个例子而第二个例子呢?

c++ lambda c++11

14
推荐指数
2
解决办法
8191
查看次数

如何设置大于1096像素的表格高度?

我正在使用C++ Builder XE7并遇到一个奇怪的问题.我需要一个大约1500像素的表格高度.问题是对象检查器不允许我指定大于1096像素的值.如果我设置任何更大的值,它将自动设置为1096 ..任何现有或新的表单上都存在问题.我使用的是Windows 7,屏幕分辨率为1920x1080.

delphi vcl c++builder

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

这是const_cast的未定义行为吗?

这里发生了什么?

const int a = 0;
const int *pa = &a;

int *p = const_cast<int*>(pa);
*p = 1;  // undefined behavior ??
cout << a << *p;  // ??
Run Code Online (Sandbox Code Playgroud)

我的编译器输出0和1,但'a'的地址和'p'的值是相同的,所以我很困惑这是怎么回事.

c++ const-cast

6
推荐指数
2
解决办法
1345
查看次数

如何将向量元素作为参数传递给可变参数模板函数?

所以,假设我有这个代码:

template <class T1, class T2>
auto sum(T1 a, T2 b) ->decltype(a + b) {
    return a + b;
}
template <class T1, class T2, class... T3>
auto sum(T1 a, T2 b, T3... tail) ->decltype(a + sum(b, tail...)) {
    return a + sum(b, tail...);
}
Run Code Online (Sandbox Code Playgroud)

我想以sum一种传递向量的方式调用函数:

vector<double> numbers = { 1, 2, 6, 5 };
Run Code Online (Sandbox Code Playgroud)

应该用作函数的参数列表sum.我怎样才能做到这一点?sum在这种情况下,调用函数应返回14.

c++ c++11 c++14

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

理解弱参考计数器

创建shared_ptr时,它的管理器对象使用强弱引用计数器.我明白通过使用强引用计数器shared_ptr知道何时解除分配托管对象但我不明白为什么它使用弱引用计数器.

c++ smart-pointers c++11

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

自动构建和安装Delphi组件

因此,我的Delphi组件功能齐全,可用,除了一些细节尚未涵盖.我想要的是创建一个设置(Inno设置),它会自动将我的组件安装到用户的Delphi/C++ Builder IDE中.我认为我必须使用delphi命令行编译器,但如何?

谢谢.

delphi components vcl

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

如何在网站上发布Web服务

我知道如何在C++ Builder/Delphi中创建Web服务.但是,我不知道如何在我的网站上发布它.我正在使用网络托管服务,而不是我自己的个人网络服务器.例如,

在此输入图像描述

我通常使用第一个选项"Stand-alone VCL application".这个可以在网站上发布吗?这些类型之间有什么区别?

delphi vcl web-services web-hosting c++builder

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

重定向unique_ptr会发生什么?

我理解这unique_ptr是某个对象的单个所有者,当它超出范围时,它会释放该对象.我不明白的是以下情况:

unique_ptr<int> p(new int(1));
p = unique_ptr<int>(new int(2));
Run Code Online (Sandbox Code Playgroud)

第一个对象new int(1)如果p被重定向到另一个内存位置会发生什么new int(2)(因为它p只能拥有其中一个)?

c++ unique-ptr c++11

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