main例如,在我的C++ 函数中,如果我有一个指向使用堆内存的变量的指针(而不是堆栈内存) - 在我的应用程序退出后会自动解除分配吗?我会这么认为.
即便如此,即使您认为永远不会在退出时自动释放内存的情况下使用堆分配,也总是删除堆分配是一种好习惯吗?
例如,这样做有什么意义吗?
int main(...)
{
A* a = new A();
a->DoSomething();
delete a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想也许以防我重构(或其他人重构)代码并将其放在应用程序的其他地方,这delete真的是必要的.
除了Brian R. Bondy(其中特别谈到C++中的含义)的答案之外,Paul Tomblin 对C特定问题也有一个很好的答案,该问题也讨论了C++析构函数.
我想为Amiga编写一个应用程序,只是为了好玩!
请有人根据以下内容逐步发布howto吗?
有些事要注意......
我已经回答了我自己的问题,但在我打算扩展答案时,请提供更多答案.感谢迄今为止所做的一切,您一直非常乐于助人!
我需要快速实现一个非常小的C或C++ TCP服务器/客户端解决方案.这只是简单地将字节数组从一台计算机传输到另一台计算机 - 不需要是可扩展的/过度复杂的.越简单越好.如果可以,快速而肮脏.
我尝试使用本教程中的代码,但我无法在Linux中使用g ++进行构建:http://www.linuxhowtos.org/C_C++/socket.htm
如果可能的话,我想避免使用第三方库,因为我运行它的系统非常有限.这必须是C或C++,因为现有的应用程序已经实现.
感谢emg-2的回答,我设法使用以下步骤使上述代码示例与C++兼容:
将这些标头添加到客户端和服务器:
#include <cstdlib>
#include <cstring>
#include <unistd.h>
Run Code Online (Sandbox Code Playgroud)
在server.c中,将clilen的类型更改为socklen_t.
int sockfd, newsockfd, portno/*, clilen*/;
socklen_t clilen;
Run Code Online (Sandbox Code Playgroud)
在client.c中,更改以下行:
if (connect(sockfd,&serv_addr,sizeof(serv_addr)) < 0) { ... }
Run Code Online (Sandbox Code Playgroud)
至:
if (connect(sockfd,(const sockaddr*)&serv_addr,sizeof(serv_addr)) < 0)
Run Code Online (Sandbox Code Playgroud) cmake和之间有什么区别ccmake?我安装了Ubuntu软件包cmake,在我的Windows计算机上,我有来自网站的安装程序,但都没有ccmake可用的命令.然而,这些教程似乎经常引用它.
似乎ccmake在Unix上是CMakeSetup在Windows上(这是安装程序).但我对它有点困惑; 它只是手动输入自己的CMakeLists.txt文件的替代方法吗?
我原来是来自C#的世界,我正在学习C++.我一直想知道在C++中获取和设置函数.在C#中,这些使用非常流行,而像Visual Studio这样的工具通过使它们变得非常容易和快速实现来促进使用.但是,在C++世界中似乎并非如此.
这是C#2.0代码:
public class Foo
{
private string bar;
public string Bar
{
get { return bar; }
set { bar = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
或者,在C#3.0中:
public class Foo { get; set; }
Run Code Online (Sandbox Code Playgroud)
可能人们会说,那是什么意思呢?为什么不创建一个公共字段,然后在需要时将其变为属性; 老实说,我其实不确定.我只是出于好的做法,因为我已经看过很多次了.
现在因为我已经习惯了这样做,我觉得我应该把习惯延续到我的C++代码中,但这真的有必要吗?我没有像C#那样频繁地完成它.
无论如何,这是我收集的C++:
class Foo
{
public:
std::string GetBar() const; // Thanks for the tip Earwicker.
void SetBar(std::string bar);
private:
std::string bar;
}
const std::string Foo::GetBar()
{
return bar;
}
void Foo::SetBar(std::string bar)
{
// Also, I always wonder if using 'this->' is good …Run Code Online (Sandbox Code Playgroud) 我们有一个相当大的项目,我已经确定Google Code不符合预期.Github看起来是一个更合适的平台 - 但我觉得我们无法逃脱.这是手动迁移的情况吗?我们目前正在使用svn,所以我知道我们需要以某种方式转移到git - 考虑到我没有管理员访问我们的存储库,这是否可能?此外,我知道这是主观的,我不想开始圣战,但请评论你对谷歌代码与Github的感受.我们还应该考虑SourceForge吗?
我们希望使用多列唯一索引来防止MS访问数据库中的记录重复.由于数据的发送方式(通过网络),有时会收到重复数据.数据源不发送唯一ID,因此最简单的选项是防止插入重复记录.
根据独特指数设计指南:
使用多列唯一索引,索引可确保索引键中每个值组合都是唯一的.例如,如果在LastName,FirstName和MiddleName列的组合上创建唯一索引,则表中的任何两行都不能具有这些列的相同值组合.
这是针对SQL 2005的,所以我不确定是否可以使用MS访问.
我想另一种方法是使用查询(伪代码):
insert into foobar (a, b, c) values ('x', 'y', 'z')
where (a <> 'x') and (b <> 'y') and (c <> 'z')
Run Code Online (Sandbox Code Playgroud)
...但我觉得索引会更好.
我尝试过使用以下内容:
(setq-default tab-width 4)
(setq-default tab-stop-list (list 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60))
Run Code Online (Sandbox Code Playgroud)
但是编辑.py文件时标签的大小仍然是8个字符宽.在其他文件中,它已降至4,所以我认为Python主要模式以某种方式覆盖了这一点.我看到我可以将python-indent设置为4,但这会导致插入空格(这违反了我们的代码样式指南).
如何使标签4个宽度?
我也试过这个,但它没有做任何事情:
(add-hook 'python-mode-hook
(setq indent-tabs-mode t)
(setq tab-width 4)
)
Run Code Online (Sandbox Code Playgroud) 这是我的代码:
// Not all headers are relevant to the code snippet.
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <cstdlib>
#include <cstring>
#include <unistd.h>
char *buffer;
stringstream readStream;
bool readData = true;
while (readData)
{
cout << "Receiving chunk... ";
// Read a bit at a time, eventually "end" string will be received.
bzero(buffer, BUFFER_SIZE);
int readResult = read(socketFileDescriptor, buffer, BUFFER_SIZE);
if (readResult < 0)
{
THROW_VIMRID_EX("Could not read from socket.");
}
// Concatenate the received data …Run Code Online (Sandbox Code Playgroud) 由于带宽原因,我的应用程序在互联网上执行速度有点慢.我已经启用了GZip,它提高了下载时间,但我还在考虑是否可以从XML切换到JSON以便挤出最后一点性能.使用JSON会使邮件大小显着缩小,还是会略小一些?假设我们说的是250kB的XML数据(压缩到30kB).