小编Def*_*ult的帖子

delete(Object)是否等效于调用Object .~Object()

我有几个连接到AngelScript引擎的类.这个引擎使用有趣的方式来分配对象:它分配所需的内存量(可能有malloc()),当作者建议使用这样的结构在这个内存中创建对象时:

static void Constructor(ObjectType *thisPointer)
{
    new(thisPointer) ObjectType();
}
Run Code Online (Sandbox Code Playgroud)

和这样的代码来销毁对象:

static void Destructor(ObjectType *thisPointer)
{
     thisPointer->~ObjectType();
}
Run Code Online (Sandbox Code Playgroud)

我有几个问题:

  • 这种方式使用析构函数是正确的吗?(Eclipse判断这是一个错误)据我所知,这段代码应该调用析构函数而不释放内存(调用free())
  • 是否可以使用delete(thisPointer)(或类似的东西)而不是这种结构,它是否相同?(至少这段代码在编译和运行时没有错误)
  • 是否还有其他方法可以在不释放内存的情况下调用析构函数?

先感谢您.

c++ memory

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

无法获得当前的键盘布局

我已经尝试了GetKeyboardLayoutName()GetKeyboardLayout()来获取当前的键盘布局,但它们都给我默认布局并且更改布局不会影响输出!

while(1)
{
    Sleep(5);
    for(int i = 8; i < 191; i++)
    {
        if(GetAsyncKeyState(i)&1 ==1)
        {
            TCHAR szKeyboard[KL_NAMELENGTH];
            GetKeyboardLayoutName(szKeyboard);

            if(GetAsyncKeyState(i)&1 ==1)
            {
                TCHAR szKeyboard[KL_NAMELENGTH];
                GetKeyboardLayoutName(szKeyboard);
                cout << szKeyboard << endl ;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当默认布局设置为英语时,它总是给我"00000409",而当我将布局更改为Farsi时,我希望它为"00000429".

我在这里的第一个问题,我过去通过搜索找到了我的所有答案.但是现在我经过几个小时的搜索并且什么也没得到......

c++ winapi keyboard-layout

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

为什么C++不会自动使用operator ==而不是operator!=

我理解C++不能operator==自动为一个类定义,但为什么它不能!(a == b)用于a != b什么时候operator!=不可用但是operator==

我知道std::rel_ops虽然我今天没有听说过它.

c++

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

如何使用具有特定子目录的通配符扫描目录

我想知道什么是扫描具有您不确定的字符的目录的好方法.

例如,我想扫描

C:\程序\版本2*\文件

含义

  • 该文件夹位于 C:\Program
  • Version2.*可能是类似的东西Version2.33,Version2.1等等.
  • 该文件夹中有一个命名的文件夹Files在它

我知道我可以做类似的事情foreach (directory) if contains("Version2."),但我想知道是否有更好的方法.

c# directory search wildcard

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

循环遍历XAML定义的标签

我有一个带有许多标签的WPF应用程序.

<Label x:Name="label1" />
<Label x:Name="label2" />
<Label x:Name="label3" />
....
Run Code Online (Sandbox Code Playgroud)

我不希望逐个给每个标签一个值,如:

label1.content= 1;
label2.content= 20;
label3.content= 30;
....
Run Code Online (Sandbox Code Playgroud)

我想要更像这样:

for(int i = 1; i<40 ;i++)
{
    label"i".content = i*10;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

.net c# wpf loops

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

运算符不能应用于'Method Group'和'int'类型的操作数

我正在尝试获取此字符串数组中的元素数量,但它不会让我离开1 Count.

string [] Quantitys = Program.RecieptList[i].ItemQuantitys.Split(new char[] {'*'});
for (int ii = 0; i <= Quantitys.Count - 1; ii++)
{

}
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息说明

运算符' - '不能应用于'Method Group'和'Int'类型的操作数.

什么是正确的方法来做到这一点?

c# arrays for-loop

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

如何使InvariantCulture将逗号识别为小数分隔符?

如何解析1,2Single.Parse?问的原因是因为,当我使用时,CultureInfo.InvariantCulture我不会按照我的意愿得到1.2,而是12.

难道"不变文化"不应该忽视文化吗?

请考虑以下示例:

using System;
using System.Globalization;

public class Program
{
    public static void Main()
    {
        Console.WriteLine(Single.Parse("1,2", CultureInfo.InvariantCulture));
        Console.WriteLine(Single.Parse("1.2", CultureInfo.InvariantCulture));
        float value;
        Console.WriteLine(Single.TryParse("1,2", NumberStyles.Float, CultureInfo.InvariantCulture, out value));
        Console.WriteLine(Single.TryParse("1,2", out value));
        Console.WriteLine(value);
    }
}
Run Code Online (Sandbox Code Playgroud)

这个的输出将是

12
1.2
错误
真实
12

但我期待:

1.2
1.2

真正
1.2

基于 读书InvariantCulture我应该得到这个结果,但我不是.

c# floating-point parsing

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

使用DataTemplate在项目上使用DoubleClick的ListBox

我想知道是否ListBox可以轻松构建一个双击功能.我有一个ListBox收藏品ItemSource.该集合包含自己的数据类型.

<ListBox ItemsSource="{Binding Path=Templates}" 
         ItemTemplate="{StaticResource fileTemplate}">
Run Code Online (Sandbox Code Playgroud)

DataTemplate为我定义了一个ItemsStackPanels和TextBlocks 组成的.

<DataTemplate x:Key="fileTemplate">
     <Border>
         <StackPanel>
              <TextBlock Text="{Binding Path=Filename}"/>
              <TextBlock Text="{Binding Path=Description}"/>
         </StackPanel>
     </Border>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

现在我想检测双击列表项的双击事件.目前我尝试使用以下,但它不起作用,因为它不会返回绑定到ListBox但是的项目TextBlock.

if (TemplateList.SelectedIndex != -1 && e.OriginalSource is Template)
{
    this.SelectedTemplate = e.OriginalSource as Template;
    this.Close();
}
Run Code Online (Sandbox Code Playgroud)

什么是干净的方法来处理的双击事件itemListBox,如果图标都没有ListBoxItems,但自己DataTemplates

c# wpf events listbox event-handling

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

0x来自哪里?

可能重复:
为什么十六进制前缀为0x?

我刚刚看到我的一位朋友发表评论:

3x12=36
2x12=24
1x12=12
0x12=18
Run Code Online (Sandbox Code Playgroud)

这让我很奇怪..
为什么他们选择0x十六进制数字的前缀?这个决定背后有历史吗?

multilingual history

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

定义operator void*和operator bool

我尝试用一​​个operator bool和一个创建一个类operator void*,但编译器说他们是不明确的.有什么方法可以向编译器解释使用什么操作符,或者我可以不同时使用它们?

class A {
public:
    operator void*(){
        cout << "operator void* is called" << endl;
        return 0;
    }

    operator bool(){
        cout << "operator bool is called" << endl;
        return true;
    }
};

int main()
{
    A a1, a2;
    if (a1 == a2){
        cout << "hello";
    }
} 
Run Code Online (Sandbox Code Playgroud)

c++ operators ambiguity

5
推荐指数
2
解决办法
1899
查看次数